public String countAndSay(int n) {
StringBuilder curr = new StringBuilder("1");//使用StringBuilder方便对字符串进行拼接,curr最开始为1,本次字符串
StringBuilder prev;//最开始prev没有值,上一次字符串,第一次时没有上一次所以不初始化值
for (int i = 1; i < n; i++) {//取n项,第一项上面定义了
prev = curr;//每次循环开始先把上一次的curr,作为这次的prev字符串
curr = new StringBuilder();//用于拼接后面的字符串,生成本次的字符串
char say = prev.charAt(0);//记录prev字符串的第一个字符
int count = 1;//记录字符的个数
for (int j = 1; j < prev.length(); j++) {//对prev字符串进行遍历,从第二个开始遍历,第一个已经记录在say中
if (prev.charAt(j) == say) {
count++;
} else {//如111221,prev.charAt(j) 变为2.say为1
curr.append(count).append(say);//如输出3个1,前面是数量,后面是字符
say = prev.charAt(j);//如111221,say变成2
count = 1;//重新初始化为1
}
}
curr.append(count).append(say);//把最后一个加入,如111221,上面循环else中say初始为最后一个1,下次不再进入for循环,此时需要把最后这个1追加,curr为312211
}
return curr.toString();
}
LeetCode38外观数列
最新推荐文章于 2024-06-20 20:20:21 发布