报数

报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

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;
}


没有办法的事了,只能不断的利用前一个数去推下一个数,直到推到指定位置的报数了


首页 我的博客
粤ICP备17103704号