题目链接
https://leetcode.cn/problems/count-and-say/
思路
递归和模拟都可以
代码
模拟
public String countAndSay(int n) {
String str = "1";
for (int i = 2; i <= n; ++i) {
StringBuilder sb = new StringBuilder();
int start = 0;
int pos = 0;
while (pos < str.length()) {
while (pos < str.length() && str.charAt(pos) == str.charAt(start)) {
pos++;
}
sb.append(Integer.toString(pos - start)).append(str.charAt(start));
start = pos;
}
str = sb.toString();
}
return str;
}
递归
public String countAndSay(int n) {
if(n==1){
return "1";
}
String s = countAndSay(n-1);
StringBuilder sb = new StringBuilder();
int flag=1;
for(int i=1;i<s.length();i++){
if(s.charAt(i) == s.charAt(i-1)){
flag++;
}else{
sb.append(String.valueOf(flag));
sb.append(s.charAt(i-1));
flag=1;
}
}
sb.append(String.valueOf(flag));
sb.append(s.charAt(s.length()-1));
return sb.toString();
}