38. Count and Say
The count-and-say sequence is the sequence of integers with the first five terms as following:
- 1
- 11
- 21
- 1211
- 111221
1
is read off as “one 1” or 11
.
11
is read off as “two 1s” or 21
.
21
is read off as “one 2, then one 1” or 1211
.
Given an integer n, generate the nth term of the count-and-say sequence. Note: Each term of the sequence of integers will be represented as a string.
通俗来说,第2项是11,因为第1项是1,读起来就是1个1,所以第2项的11前一个1表示后一个1的计数,以此类推。
第n项:第n-1项的数字串从左到右读出来。
方法1:2ms beat100%
思路:递归 在n-1项的结果上求解。设置首尾指针来确定前后一致的字符个数。apend(相同字符个数).apend(字符)
public String countAndSay(int n) {
if (n == 1){
return "1";
}
else {
StringBuilder sb = new StringBuilder();
String forward = countAndSay(n - 1);
char[] words = forward.toCharArray();
for (int i = 0; i < words.length; i++) {
int j = i;
while (j < words.length && words[i] == words[j]){
j++;
}
sb.append(j - i).append(words[i]);
i = j - 1;
}
return sb.toString();
}
}