Problem 38: Count and Say
思路
理解题目:
解释一下就是,输入n,那么我就打出第n行的字符串。
怎么确定第n行字符串呢?他的这个是有规律的。
n = 1时,打印一个1
n = 2时,看n=1那一行,念:1个1,所以打印:11
n = 3时,看n=2那一行,念:2个1,所以打印:21
n = 4时,看n=3那一行,念:一个2一个1,所以打印:1211
以此类推。(注意这里n是从1开始的)
每个 entry 的格式是: count + oldChar;所以我们对每个 char 遍历一遍就好
public class Solution {
public String countAndSay(int n) {
String oldString = "1";
//n = n - 1;
while (--n > 0) {
StringBuilder sb = new StringBuilder();
char[] oldChars = oldString.toCharArray();
for (int i = 0; i < oldChars.length; i++) {
int count = 1;
while (i + 1 < oldChars.length && oldChars[i] == oldChars[i + 1]) {
count++;
i++;
}
sb.append(String.valueOf(count) + String.valueOf(oldChars[i]));
}
oldString = sb.toString();
//n--;
}
return oldString;
}
}
易错点
oldString = "1" 初始时已经有了,所以在 n 内已经占用了一个了。所以我们从 n - 1 开始
String to char
char[] oldChars = oldString.toCharArray();
int or Char to String
String a = String.valueOf(count); String b = String.valueOf(oldChars[i]);
Last updated
Was this helpful?