package test;
public class dd {
// 1:"1",
// 2:"11",
// 3:"21",
// 4:"1211",
// 5:"111221",
// 6:"312211",
// 7:"13112221",
public static void main (String[] args) {
System.out.println(test01(7));
}
public static String test01 (int n) {
//最终的字符串
StringBuilder sb = new StringBuilder();
sb.append(1);
if (n == 1) {
return sb.toString();
}
//第一层for循环就是决定我们对s进行了几次报数 每次报数之后我们要把s进行重新赋值
//所以我们的s要在外面进行声明
for (int i = 1;i < n;i++) {
//本次遍历产生的字符串
StringBuilder sb1 = new StringBuilder();
int j = 0; //记录每次不同的字符的索引
//判断每个字符有几个相同的
for (int k = 0; k < sb.length(); j = k ) {
//这里有一个小的问题就是我们要先进行我们的下标的判断 才能根据下标进行比较
//要不就会有下标越界的异常
//简单的说就是 k < sb.length() && sb.charAt(j) == sb.charAt(k) 的顺序不能交换
while (k < sb.length() && sb.charAt(j) == sb.charAt(k) ) {
//索引右移动一位 下次判断这一位还是不是和前面的相同
k++;
}
//将相同的字符的个数(k-j)和字符加入到我们的sb1中去
sb1.append(k - j);
sb1.append(sb.charAt(j));
//j = k; 给j重新赋值一个索引
}
//本次遍历完成我们需要改变一下我们sb的值 方便下一次的遍历
sb = sb1;
}
return sb.toString();
}
}