我的LeetCode代码仓:https://github.com/617076674/LeetCode
原题链接:https://leetcode-cn.com/problems/count-and-say/description/
题目描述:
知识点:递归
思路:求解报数序列的第n项要根据报数序列的第n - 1项来求解
本题是一道典型的递归问题。
递归终止条件:当n为1时,输出字符串"1"。
递归过程:
(1)得到序列n - 1对应的字符串pre,将其转换为字符数组。新建一个StringBuilder类型的变量stringBuilder用以保存结果。
(2)对于pre中的每一个字符,寻找其后与其相同的字符数(包含它自己)index,根据index来跳跃遍历pre。
(3)根据题意将结果保存进stringBuilder中。
由于我们总共递归了n - 1次,而每一次递归的时间复杂度与第n - 1号序列对应的字符串长度有关,因此时间复杂度分析比较难算。而空间复杂度就是递归深度,是O(n)级别的。
JAVA代码:
public class Solution {
public String countAndSay(int n) {
if(n == 1) {
return "1";
}
String pre = countAndSay(n - 1);
StringBuilder stringBuilder = new StringBuilder();
for(int k = 0; k < pre.length();) {
int index = 1;
for (int i = k; i < pre.length() - 1; i++) {
if(pre.charAt(i) == pre.charAt(i + 1)) {
index++;
}else {
break;
}
}
stringBuilder.append(String.valueOf(index));
stringBuilder.append(pre.charAt(k));
k += index;
}
return stringBuilder.toString();
}
}
LeetCode解题报告: