这个问题花了好长时间,主要是审题有问题,我理解错了,以为是从前往后读,遇到11就变为21,遇到2就变为12,遇到12就变为1112,所以我以为n=6的结果是2111121211,导致写出的程序总是不能Accept。后来上网搜了一下,才知道我审错题了,原来是遇到x个相同的数字y,就返回xy,所以n=6的正确结果是312211。
思路:这个问题无疑是用递归比较方便,然后的问题就是在一个数字组成的字符串里,把相邻的x个相同数字y的子串变成xy。
实现:
public class Solution {
public String countAndSay(int n) {
if(1 == n)
return "1";
if(2 == n)
return "11";
String origin = countAndSay(n - 1);
int count = 1;
StringBuffer result = new StringBuffer();
for(int i = 0; i < origin.length() - 1; i++) {
if(origin.charAt(i) == origin.charAt(i + 1)) {
count++;
if(origin.length() - 2 == i) {
result.append(count);
result.append(origin.charAt(i));
}
} else {
result.append(count);
result.append(origin.charAt(i));
count = 1;
if(origin.length() - 2 == i) {
result.append(count);
result.append(origin.charAt(i + 1));
}
}
}
return result.toString();
}
}
总结:主要是审题要正确!