文章目录
题目描述
这个是我自己的代码,效率不是很高:
class Solution {
public String countAndSay(int n) {
if(n == 1)
{
return "1";
}
String str = countAndSay(n - 1);
int i = 0;
String str1 = "";
while(i < str.length())
{
int j = i + 1;
int count = 1;
while(j < str.length() && str.charAt(i) == str.charAt(j))
{
i++;
j++;
count++;
}
String str2 = String.valueOf(count) + str.charAt(i);
str1 = str1 + str2;
i++;
}
return str1;
}
}
后来发现利用StringBuilder很好:
class Solution {
public String countAndSay(int n) {
if (n == 1) return "1";
else {
String lastStr = countAndSay(n - 1); // 1 2 1 1
StringBuilder ans = new StringBuilder();
int i = 0, j = 1, len = lastStr.length();
while (j < len) {
if (lastStr.charAt(i) != lastStr.charAt(j)) {
ans.append(j - i).append(lastStr.charAt(i));
i = j;
}
j++;
}
ans.append(j - i).append(lastStr.charAt(i));
return ans.toString();
}
}
}
修改后的我的:
class Solution {
public String countAndSay(int n) {
if(n == 1)
{
return "1";
}
String str = countAndSay(n - 1);
int i = 0;
StringBuilder str1 = new StringBuilder();
while(i < str.length())
{
int j = i + 1;
int count = 1;
while(j < str.length() && str.charAt(i) == str.charAt(j))
{
i++;
j++;
count++;
}
str1.append(count).append(str.charAt(i));
i++;
}
return str1.toString();
}
}
看来大规模数据还是需要利用StringBuilder比较好。