my
class Solution {
public String countAndSay(int n) {
String s = "1";
for (int i = 2; i <=n ; i++ )
{
s = nextString(s);
}
return s;
}
public String nextString(String s)
{
//String s = Integer.toString(n);
char[] ch = s.toCharArray();
int len = ch.length;
int pn = 0;
//int num = 0;
String re = "";
//取当前数存入temp
//for (int i = 0; i< n; i++ )
while(pn < len)
{
//num = 0;
char temp = ch[pn];
int k = pn;
while(k < len && s.charAt(k) == s.charAt(pn) )
{
//System.out.println("k="+k);
//num++;
k++;
}
k = k-pn;
//保存第一组,k=3,ch[i]
re = re+""+k+ch[pn];
//System.out.println("re="+re);
//将指针pn = pn+k;
pn = pn + k;
}
return re;
}
}
官网:递归
class Solution {
public String countAndSay(int n) {
// 递归终止条件
if (n == 1) {
return "1";
}
// 获取到上一层的字符串
String s = countAndSay(n - 1);
StringBuilder result = new StringBuilder();
// 记录每个数字的开始索引
int start = 0;
for (int i = 1; i < s.length(); i++) {
// 当数字发生改变时执行
if (s.charAt(i) != s.charAt(start)) {
result.append(i - start).append(s.charAt(start));
start = i;
}
}
// 字符串最后一个数字
result.append(s.length() - start).append(s.charAt(start));
return result.toString();
}
}