记录一次面试

作者: 周伟林 分类: 求职面试 发布时间: 2018-05-22 23:23

今天参加了一场面试,记录一下遇到的算法题。

第一题 打印螺旋矩阵

题目描述,如下,输入n,输出一个矩阵

n = 3
1 2 3
8 9 4
7 6 5
n=4
 1  2  3  4
12 13 14  5
11 16 15  6
10  9  8  7

解法

// 打印矩阵
function print(arr){
    let rows = arr.length, cols = arr[0].length;
    for(let i = 0; i < rows; ++i){
        console.log(arr[i].join(" "));
    }
}

function t1(n){
    if(n <= 0) return;
    let arr = [];
    // 初始化数组为全零
    for(let i = 0; i < n; ++i){
        let tmp = [];
        for(let j = 0; j < n; ++j){
            tmp.push(0);
        }
        arr.push(tmp);
    }
    let x = 1;  // 从1开始填数
    for(let start = 0; start < n/2; ++start){
        let row = start, col = start;
        for(; col < n-start; ++col){
            arr[row][col] = x++;
        }
        for(--col, ++row; row < n-start; ++row){
            arr[row][col] = x++;
        }   
        for(--row, --col; col >= start; --col){
            arr[row][col] = x++;
        }   
        for(++col, --row; row > start; --row){
            arr[row][col] = x++;
        }
    }
    return arr;
}

// -- main --
for(let i = 2; i < 6; ++i){
    console.log(`-- n=${i} --`);
    print(t1(i));
}

输出结果

-- n=2 --
1 2
4 3
-- n=3 --
1 2 3
8 9 4
7 6 5
-- n=4 --
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
-- n=5 --
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9

第二题 说出下面函数的输出结果

// 输出结果
var num = 1;
var myObject = {
    num: 2,
    add: function(){
        this.num = 3;              // myObject.num -> 3
        (function(){
            console.log(this.num); // 封闭函数, 输出window.num->1
            this.num = 4;          // window.num -> 4
        })();
        console.log(this.num); // 3
    },
    sub: function(){
        console.log(this.num); 
    } 
}; 
myObject.add(); 
console.log(myObject.num);  // 3
console.log(num);  // 4
var sub = myObject.sub; 
sub(); // 4

第三题 实现一个reduce函数

// 实现reduce polyfill
/**
 * 面试官老师的意思应该是要是现在Array的原型上,面试的时候懵逼了😣😣😣
 */
Array.prototype.myReduce = function(func){
    let len = this.length;
    if(len < 1) return -1;
    let ret = this[0];
    for (let i = 1; i < this.length; i++) {
        ret = func(ret, this[i]);
    }
    return ret;
}

let x = [5,4,3,2,1];
console.log(Array.prototype.reduce.call(x, (x,y)=>(x+y)));  // 15
console.log(x.reduce((x,y)=>(x+y)));                        // 15
console.log(x.myReduce((x,y)=>(x+y)));                      // 15

发表评论

电子邮件地址不会被公开。 必填项已用*标注