题目:
The count-and-say sequence is the sequence of integers beginning as follows:
1, 11, 21, 1211, 111221, ...
1
is read off as "one 1"
or 11
.
11
is read off as "two 1s"
or 21
.
21
is read off as "one 2
, then one 1"
or 1211
.
Given an integer n, generate the nth sequence.
Note: The sequence of integers will be represented as a string.
题意:
count-and-say 序列是如下面所示的一组整数数列:
1, 11, 21, 1211, 111221, ...
1
读作“一个1”或者11.
11 读作"两个1" 或者 21.
21 读作“一个2”,和“一个1” 或者 1211.
给定一个整数 n,产生第n个序列。
注意:这个生成的整数序列应该用一个字符串表示出来。
算法分析:
* 题目说的实在是太不明白了。。。
* 解释一下就是,输入n,那么我就打出第n行的字符串。
* 怎么确定第n行字符串呢?他的这个是有规律的。
* n = 1时,打印一个1。
* n = 2时,看n=1那一行,念:1个1,所以打印:11。
* n = 3时,看n=2那一行,念:2个1,所以打印:21。
* n = 4时,看n=3那一行,念:一个2一个1,所以打印:1211。
* 以此类推。(注意这里n是从1开始的)
题目不难,直接上代码
AC代码:
public class Solution
{
public String countAndSay(int n)
{
String subres = "";
if (n==1) return "1";
int sn = 2;
String subinput="1";
while(sn<=n)
{
subres=SubsountandSay(subinput);
subinput=subres;
sn++;
}
return subres;
}
private String SubsountandSay(String n)
{
String res = "";
String oristring= n;
char tem;
int i = 0;
int startindex=0;
int k=0;
while(i<oristring.length())
{
k=0;
tem='\0';
while(i<oristring.length())
{
if(oristring.charAt(startindex)==oristring.charAt(i))
{
k++;
tem=oristring.charAt(i);
i++;
}
else
{
startindex=i;
break;
}
}
res+=Integer.toString(k)+tem;
}
return res;
}
}