1.28 剑指offer

93 阅读1分钟

29.顺时针打印矩阵

//常规的暴力解法,注意边界
var spiralOrder = function(matrix) {
    if(matrix.length==0||matrix[0].length==0) return [];
    let x = 0;
    let y = matrix.length-1;
    let a = 0;
    let b = matrix[0].length-1;
    let res = [];
    while(1){
        for(let i = a;i<=b;i++){
            res.push(matrix[x][i]);
        }
        if(++x>y){
            break;
        }
        for(let i = x;i<=y;i++){
            res.push(matrix[i][b]);
        }
        if(--b<a){
            break;
        }
        for(let i = b;i>=a;i--){
            res.push(matrix[y][i]);
        }
        if(--y<x){
            break;
        }
        for(let i = y;i>=x;i--){
            res.push(matrix[i][a]);
        }
        if(++a>b){
            break;
        }
    }
    return res;
};

16.数值的整数次方

// 快速幂,二分法。记住求2的余数是>>(右移)
var myPow = function(x, n) {
    if(n==0) return 1;
    if(n==1) return x;
    if(n==-1) return 1/x;
    let res = myPow(x,n>>1);
    res *= res;
    if(n&1===1){
        res *= x; 
    }
    return res;
};