[LeetCode] Count and Say 數數並說
阿新 • • 發佈:2019-02-11
數數並說序列是一個整數序列,第二項起每一項的值為對前一項的計數,其前五項如下:
- 1
- 11
- 21
- 1211
- 111221
1 被讀作 “一個一” 即 11。
11 被讀作 “兩個一” 即 21。
21 被讀作 “一個二 和 一個一” 即 1211。
給一個正整數 n ,輸出數數並說序列的第 n 項。
注意:該整數序列的每項都輸出為字串。
例 1:
輸入: 1
輸出: "1"
例 2:
輸入: 4
輸出: "1211"
思路:對於前一個數,找出相同元素的個數,把個數和該元素存到新的string裡。
/**
* @param {number} n
* @return {string}
*/
var countAndSay = function(n) {
if (n <= 0) return "";
let res = "1";
while (--n) {
let cur = "";
for (let i = 0; i < res.length; ++i) {
let cnt = 1;
while (i + 1 < res.length && res[i] == res[i + 1]) {
++cnt;
++i;
}
cur += cnt.toString() + res[i];
}
res = cur;
}
return res;
};