报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示:
1, 11, 21, 1211, 111221, ...
1 读作 "one 1" -> 11.
11 读作 "two 1s" -> 21.
21 读作 "one 2, then one 1" -> 1211.
给定一个整数 n, 返回 第 n 个顺序。
注意事项
整数的顺序将表示为一个字符串。
样例
1, 11, 21, 1211, 111221, ...
1 读作 "one 1" -> 11.
11 读作 "two 1s" -> 21.
21 读作 "one 2, then one 1" -> 1211.
给定一个整数 n, 返回 第 n 个顺序。
注意事项
整数的顺序将表示为一个字符串。
样例
给定 n = 5, 返回 "111221".
import java.util.Scanner;
/**
*
* 报数指的是,按照其中的整数的顺序进行报数,然后得到下一个数。如下所示:
1, 11, 21, 1211, 111221, ...
1 读作 "one 1" -> 11.
11 读作 "two 1s" -> 21.
21 读作 "one 2, then one 1" -> 1211.
给定一个整数 n, 返回 第 n 个顺序。
注意事项
整数的顺序将表示为一个字符串。
样例
给定 n = 5, 返回 "111221".
* @author Dell
*
*/
public class Test420 {
public static String countAndSay(int n)
{
if(n==0)
return "";
if(n==1)
return "1";
String[] s=new String[n+1];
s[0]="";
s[1]="1";
for(int i=2;i<=n;i++)
{
StringBuilder sb=new StringBuilder();
String temp=s[i-1];
int count=1;
for(int j=0;j<temp.length();j++)
{
char c=temp.charAt(j);
int k=j+1;
boolean flag=false;
while(k<=temp.length()-1&&c==temp.charAt(k))
{
count++;
k++;
flag=true;
}
sb.append(count);
sb.append(c);
count=1;
if(flag==true)
{
j=k-1;
}
}
s[i]=sb.toString();
}
return s[n];
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
System.out.println(countAndSay(n));
}
}