小米前端笔试编程题
第一题阶梯问题比较简单略过。
第三题:给一个数字,将其变为字母字符串(规则1->a,2->b,...,26->z),如输入123,按字典序输出'abc','aw','lc'(123可以拆成1,2,3;12,3;1,23,三种)。
用dp,不太熟练,花了好久,通过率67%,估计是0的锅,没来得及在线上改完就提交了orz
下面是改好的版本,也不知道能不能ac:
function solution(n) { let dp = []; dp[0] = [[]]; n = String(n).split(''); for (let i = 0; i < n.length; i++) { dp[i+1] = []; if (i === 0) { dp[1] = [[int(n[0])]]; } else if (n[i - 1] === '1') { if (n[i] !== '0') { for (let item of dp[i]) { dp[i + 1].push(item.concat(int(n[i]))); } } for (let item of dp[i - 1]) { dp[i + 1].push(item.concat(int(n[i - 1] + n[i]))); } } else if (n[i - 1] === '2' && int(n[i]) <= 6) { if (n[i] !== '0') { for (let item of dp[i]) { dp[i + 1].push(item.concat(int(n[i]))); } } for (let item of dp[i - 1]) { dp[i + 1].push(item.concat(int(n[i - 1] + n[i]))); } } else if (n[i] !== '0') { for (let item of dp[i]) { dp[i + 1].push(item.concat(int(n[i]))); } } } let r = dp[dp.length - 1]; let result = []; for (let item of r) { let str = ''; for (let num of item) { str += (String.fromCharCode(num + 96)); } result.push(str); } return result; } function int(n) { return parseInt(n); } let input; while(input = readInt()) { let result = solution(input); result.sort(); let resultStr = ''; for (let item of result) { resultStr += item + ' '; } print(resultStr.trim()); }
所以第二题呢?没来得及写,感觉也像是dp?求一个解答
#笔试题目##小米#