先看题目要求
解决思路 用递归的思想解决问题 从第三项开始,每一项都对前一项的字符串进行拆分统计。为此,我们需要一个空的字符串和一个统计次数的变量count ,每一次比较arr[i]和arr[i-1]的值,若相等,则将count的值加1,若不相等,则将count的值置为1,当i指针遍历到数组最后一个元素时,将这个值与当前的count拼接起来,再将结果拼接到此前的字符串中即可。
由于要进行频繁的字符串拼接操作,我们选择StringBuilder这个类来进行相关操作。
代码
class Solution {
public String countAndSay(int n) {
int count = 1;
StringBuilder ret = new StringBuilder();
if (n == 1) {
return "1";
} else if (n == 2) {
return "11";
}
char[] arr = countAndSay(n - 1).toCharArray();
for (int i = 0; i < arr.length; i++) {
if (i == 0) {
continue;
}
while (i <= arr.length - 1 && arr[i] == arr[i - 1]) {
count++;
if (i == arr.length - 1) {
ret.append(count).append(arr[i]);
break;
}
i++;
}
while (arr[i] != arr[i - 1]) {
ret.append(count).append(arr[i-1]);
count = 1;
if (i == arr.length - 1) {
ret.append(count).append(arr[i]);
}
break;
}
}
return ret.toString();
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容