bilibili前端笔试编程部分代码
第一题:台阶走法,可以走1阶或2阶,n阶有多少种走法(斐波那契数列,这里用了非递归的写法)
var len = readline() var arr = [0, 1, 2, 3], i = 4; while (i <= n) { arr[i] = arr[i - 1] + arr[i - 2]; i++; } console.log(arr[n]);扩展:还有个可以走1阶,2阶,,,n阶,走n阶有多少种走法(共有2^(n-1)中走法)
第二题:找出有序数组(已排序)中和为sum的两个数,复杂度为o(n)
思路:从两端遍历,i=0,j=len-1,如果和小于sum,i++;如果等于记录两个值;如果大于sum,j--;遍历完有两个值的话,输出,没有输出‘notfound’(不是‘not found’哟,没有空格)
var len = readline(); var arr = readline().split(' '); var sum = readline(); var i = 0, j = len - 1, a = 0, b = 0; while (i < j) { var tmp = parseInt(arr[i]) + parseInt(arr[j]); if (tmp == sum) { a = arr[i]; b = arr[j]; break; } if (tmp > sum) { j--; } if (tmp < sum) { i++; } } if (a && b) { console.log(a + ' ' + b); } else { console.log('notfound'); }第三题:括号匹配,判断'()[]{}'组成的字符串是否匹配
思路:使用栈判断栈顶元素和当前元素是否匹配,匹配则继续,不匹配,直接break;
var str = readline(); var left = ['(', '[', '{']; var right = [')', ']', '}']; var arr = [], el, tmp, flag = true; for (var i = 0; i < str.length; i++) { el = str[i]; if (left.indexOf(el) > -1) { arr.push(el); } else { if (left.indexOf(arr.pop()) != right.indexOf(el)) { flag = false; break; } } } console.log(flag);