《剑指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;
}

 

posted @ 2017-07-31 17:22  水迹仙涯  阅读(207)  评论(0编辑  收藏  举报