1. 题目描述
2. 解题思路
既然这是使用递归定义的字符串,那么自然而然我们也使用递归来解决,当然也可以使用迭代实现,有意思的是官方居然整了个“打表”的方法,妥妥地面向测试用例编程了,真的是老奶奶钻被窝,给爷整笑了!
3. 代码实现
public String countAndSay(int n) {
if (n == 1)
return "1";
char[] chars = countAndSay(n - 1).toCharArray();
char pre = chars[0];
int count = 1;
StringBuilder sb = new StringBuilder();
for (int i = 1; i < chars.length; i++) {
if (chars[i] == pre)
count++;
else {
sb.append(count).append(pre);
pre = chars[i];
count = 1;
}
}
sb.append(count).append(pre);
return sb.toString();
}
该算法的时间复杂度是O(m*n),m为生成字符串的长度,n为输入值,而空间复杂度主要是栈空间,栈的深度为输入值n,因此空间复杂度为O(n)。