题目:
The count-and-say sequence is the sequence of integers beginning as follows:
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 sequence.
Note: The sequence of integers will be represented as a string.
大意:
n=1时输出字符串1;n=2时,因为上次字符串有1个1,所以输出11;n=3时,由于上次字符是11,有2个1,所以输出21;n=4时,由于上次字符串是21,有1个2和1个1,所以输出1211。根据传入的n的值,返回字符串。
思路:
第一种情况:n<0时返回null。
第二种情况:当n=1时,返回1
第三种情况:当n>1时,假设n-1返回的字符串是s,对s的串进行处理理,对不同的数字进行分组比如112365477899,分成11,2,3,6,5,4,77,8,99。最有就2个1,1个2,1个3,1个6,1个5,一个4,2个7,1个8,2个9,就是211213161614271829,返回此结果。
使用简单的迭代求解。
代码:
public class Solution {
public String countAndSay(int n) {
if(n < 1)
return null;
String result = "1";
int i = 1;
while(i < n) {
StringBuilder sb = new StringBuilder();
//统计连续相同数字出现的次数
int count = 1;
//遍历result中的每个字符
for(int j = 1; j < result.length(); j++) {
if(result.charAt(j) == result.charAt(j - 1)) {
count++;//相同的字符count++
} else {
//不同的字符,先将之前的次数和字符append到sb中
sb.append(count);
sb.append(result.charAt(j - 1));
count = 1;
}
}
sb.append(count);
sb.append(result.charAt(result.length() - 1));
result = sb.toString();
i++;
}
return result;
}
}