标签:rest function 注意 block 表示 space tmp convert 外观
题目描述: 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出外观数列的第 n 项。
注意:整数序列中的每一项将表示为一个字符串。
//JS
var countAndSay = function(n) {
let preStr = "1", newStr = "", tmp = "", cnt = 0;
for(let i = 1; i < n; i++){ //计算每一项的字符串
newStr = "";
tmp = preStr[0];
cnt = 0;
for(let j = 0; j < preStr.length; j++){ //生成新一项的字符串
if(tmp == preStr[j]) cnt++;
else {
newStr += cnt + tmp;
tmp = preStr[j];
cnt = 1;
}
}
preStr = newStr + cnt + tmp;
}
return preStr;
};
//JS
var countAndSay = function(n) {
if(n == 1) return "1";
let preStr = countAndSay(n - 1);
let dfs = (str) => {
let newStr = "", tmp = str[0], cnt = 0;
for(let i = 0; i < str.length; i++){ //生成新一项的字符串
if(tmp == str[i]) cnt++;
else {
newStr += cnt + tmp;
tmp = str[i];
cnt = 1;
}
}
str = newStr + cnt + tmp;
return str;
}
return dfs(preStr);
};
//JS
var countAndSay = function(n) {
let preStr = "1";
for(let i = 1; i < n; i++){
preStr = preStr.replace(/(\d)\1*/g, item => `${item.length}${item[0]}`);
}
return preStr;
};
标签:rest function 注意 block 表示 space tmp convert 外观
原文地址:https://www.cnblogs.com/JesseyWang/p/13084081.html