LeetCode

来源:互联网 发布:室内设计什么软件好 编辑:程序博客网 时间:2024/05/16 05:04

解题代码:

classSolution {

public:

    int magicalString(int n) {

        if(n<=0)

            return 0;

        else if(n<=3)

            return 1;

        int count=1,j=3,last=2;

        string str="122";

        for(int i=2;j<n;i++){

            if(str[i]=='1'){

                if(last==1){

                    str+="2";

                    last=2;

                    j++;

                }

                else{

                    str+="1";

                    last=1;

                    count++;

                    j++;

                }

            }

            else{

                if(last==1){

                    str+="22";

                    last=2;

                    j+=2;

                }

                else{

                    str+="11";

                    last=1;

                    if(j+2>n){

                        count++;

                        j+=2;

                    }

                    else{

                        count+=2;

                        j+=2;

                    }

                }

            }

        }

        return count;

    }

};

解题思路:

根据题目要求,输出前n位的magicalstring中1的数量。重点在于了解magicalstring的构造方法。因此若n为1到3之间的数,返回1,若n大于3,构造字符串“122”,根据magicalstring的规则,第三位为“2”,则后面需要添加连续的两个相同的数“11”,然后看第四位为“1”,因此后面需要添加一个数“2”;以此类推,直到构造出长度为n的magicalstring为止,同时可以算出前n位“1”的个数。


0 0
原创粉丝点击