劍指offer-JavaScript版

Jsp發表於2018-07-29

1.在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。

function find(arr,num){
    var len = arr.length,i = 0,j = arr[0].length-1;
    while(i < len && j >= 0){
        if(arr[i][j] == num){
            return true;
        }else if(arr[i][j] > num){
            j--;
        }else{
            i++;
        }
    }
    return false;
}
複製程式碼

2.請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

function replaceSpace(str){
    return str.replace(/\s+?/g,'%20');
}複製程式碼

3.輸入一個連結串列,從尾到頭列印連結串列每個節點的值。

function  printList(head) {
    var res = [];
    while(head){
        res.push(head.value);
        head = head.next;
    }
    res.reverse();
    return res;
}複製程式碼

4.輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。

function restructor(pre,vin){
    if(pre.length == 0 || vin.length == 0){
        return null;
    }
    var index = vin.indexOf(pre[0]);
    var leftpre = pre.slice(1,index+1);
    var rightpre = pre.slice(index+1);
    var leftvin = vin.slice(0,index);
    var rightvin = vin.slice(index+1);
    var node = new TreeNode(vin[0]);
    node.left = restructor(leftpre,leftvin);
    node.right = restructor(rightpre,rightvin);
    return node;
}
複製程式碼

5.用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。

var stack1 = [];
var stack2 = [];
function push(node){
    stack1.push(node);
}
function pop(){
    var tmp = stack1.pop();
    while(tmp){
        stack2.push(tmp);
        tmp = stack1.pop();
    }
    var res = stack2.pop();
    tmp = stack2.pop();
    while(tmp){
        stack1.push(tmp);
        tmp = stack2.pop();
    }
    return res;
}複製程式碼

6.把一個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。

function minArr(arr) {
    if(arr.length == 0){
        return 0;
    }
    return Math.min.apply(null,arr);
}複製程式碼

7.大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。n<=39

function fibonacci(n) {
    if(n ==1 || n==0){
        return n;
    }
    var a= 1,b=1,tmp;
    for(var i=2;i<=n;i++){
        tmp = a+b;
        a = b;
        b = tmp;
    }
    return a;
}複製程式碼

8.一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。

function jumpFloor(num){
    if(num < 1){
        return 0;
    }
    if(num < 2){
        return 1;
    }
    return jumpFloor(num-1) + jumpFloor(num-2);
}複製程式碼


相關文章