报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1 2. 11 3. 21 4. 1211 5. 111221
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n ,输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串
示例 1: 输入: 1 输出: "1" 示例 2: 输入: 4 输出: "1211"
public string CountAndSay(int n) {
if(n == 0) return "";
string res = "1";//初始化第一个报数
StringBuilder tempRes;//临时计算报数的串
for(int i = 2;i <= n;i++)
{
int index = 1;//有几个当前个体
int targetIndex = 0;//当前个体
tempRes = new StringBuilder();
for(int j = 1;j < res.Length; j++)
{
//和前面的比较
if(res[j-1] == res[j])
{
index++;
}
else
{
tempRes.Append( index.ToString() );
tempRes.Append( res[targetIndex] );
targetIndex = j;//更改当前个体为这个不相等的字符
index = 1;//多少个,当然是1个了
}
}
//收尾,最后一次的数数还没有算进来的
tempRes.Append( index.ToString() );
tempRes.Append( res[targetIndex] );
res = tempRes.ToString();
}
return res;
}没有办法的事了,只能不断的利用前一个数去推下一个数,直到推到指定位置的报数了