题目
题目链接:leetcode-cn.com/leetbook/re…
题解
这种题目认真看题,按题目要求解答就行;
1、双层循环遍历求解
重点在于分清两个循环,外层循环用于处理传入的 n,内层循环用来获得描述上一个字符串的字符串;当然双层循环也可以改成递归~
/**
* @param {number} n
* @return {string}
*/
var countAndSay = function(n) {
if(n === 1) {
return '1';
}
n = n-1;
let countString = '1';
for(let i = 1;i <= n;i++) {
// 将重复出现的字符串分割、记录,并将记录添加到一个数组中
let count = 0,number = countString[0];
let newArr = [];
const countStringLen = countString.length;
for(let j = 0;j < countStringLen;j++) {
if(number !== countString[j]) {
newArr.push(count + '' + number);
count = 0;
number = countString[j];
}
count++;
}
newArr.push(count + '' + number); // 将最后一组数字加进数组
countString = newArr.join('');
}
return countString;
};
2、递归方法
/**
* @param {number} n
* @return {string}
*/
var countAndSay = function(n) {
// 递归结束条件
if(n === 1) {
return '1';
}
let countString = countAndSay(n-1); // 递归
let count = 0,number = countString[0];
let newArr = [];
const countStringLen = countString.length;
for(let j = 0;j < countStringLen;j++) {
if(number !== countString[j]) {
newArr.push(count + '' + number);
count = 0;
number = countString[j];
}
count++;
}
newArr.push(count + '' + number); // 将最后一组数字加进数组
countString = newArr.join('');
return countString;
};
大家如果有更好的思路和解法,欢迎大家一起来讨论啊~
这是使用 JavaScript 对 LeetCode《初级算法》的每道题的总结和实现的其中一篇,汇总篇在这里: