《剑指offer》 JavaScript版(1-3题)
1、二维数组中的查找
题目描述
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
实现思路
从数组的右上角开始查找,如果右上角的值大于target,则往下走,否则往左走,直至找到值或者返回错误。
代码
function Find(target, array) { let row = array.length, col = array[0].length, r = row-1, c = 0; while(r >= 0 && c < col){ if(target>array[r][c]){ //从右上角开始,如果数值小于目标值,则往下走 c++; }else if(target<array[r][c]){ //如果数值大于目标值,则往左走。 r--; }else{ return true; //找到target } } return false; //没找到target }
2.替换空格
题目描述
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
实现思路
使用正则表达式。
代码
function replaceSpace(str) { return str.replace('/\s/g,'20%'); }
3.从尾到头打印链表
题目描述
输入一个链表,从尾到头打印链表每个节点的值。
实现思路
创建一个空数组,如果链表不为空,将链表中的值依次插入数组的头部。array.unshift()方法可以实现头部插入。
代码
/*function ListNode(x){ this.val = x; this.next = null; }*/ function printListFromTailToHead(head) { let list=[]; while(head){ //如果链表里面不为空 list.unshift(head.val); //将链表中值插入list数组的头部 head=head.next; //下移指针 return list; }