小米前端笔试编程题
第一题阶梯问题比较简单略过。
第三题:给一个数字,将其变为字母字符串(规则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?求一个解答
#笔试题目##小米#