报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
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; }
没有办法的事了,只能不断的利用前一个数去推下一个数,直到推到指定位置的报数了