//思路就是 从字符串开头一直读取几个几,如21 就是一个2一个1就是1211,2231就是两个2一个3一个1,就是221311
//时间复杂度23.89%,空间6.87%
class Solution {
public String countAndSay(int n) {
String previousStr="1";
String currentStr="1";
int i=0,j=0;//双指针
int k=1;
while(k<n){
currentStr="";
while(j<previousStr.length()){
while(j<previousStr.length()&&previousStr.charAt(i)==previousStr.charAt(j)){
++j;
}
currentStr=currentStr+String.valueOf(j-i)+previousStr.charAt(i);
if(j==previousStr.length()-1&&previousStr.charAt(j)!=previousStr.charAt(j-1))
currentStr=currentStr+"1"+previousStr.charAt(j); //if处理下面那个注释的问题
i=j;
++j; //这一步可能会范围溢出 有时候会导致最后一个单独的数字没有读到(比如22331,这个1读不到)
}
previousStr=currentStr;
i=0; //一个数字报数完成,指针初始化 然后进入下一个报数
j=0;
++k;
}
return currentStr;
}
}
06-15
06-15
06-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交