问题:
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 n th sequence.
问题要求,给一个数字n(n从1开始计数),得到第count-and-say序列中第n个位置的字符串。
从上面的序列可以看出,后一个是前一个的读法。
因此,111221下一个数为312211(3个1,2个2,1个1)。
代码示例:
public class Solution {
public String countAndSay(int n) {
if (n < 1) {
return null;
}
String result = "1";
while (n > 1) {
//数据驱动
//下一个字符,通过解析上一个字符串得到
result = transfer(result);
--n;
}
return result;
}
private static String transfer(String last) {
StringBuilder sb = new StringBuilder("");
char prev = last.charAt(0);
int count = 1;
for (int i = 1; i < last.length(); ++i) {
char curr = last.charAt(i);
if (prev == curr) {
++count;
} else {
//每次出现不相等的字符,就可以打印count和字符
sb.append(count).append(prev);
prev = curr;
count = 1;
}
}
//结束循环后,完成最有一次的打印
sb.append(count).append(prev);
return sb.toString();
}
}