[leetcode]count and say2

class Solution {
public:
    //when see str, return count and say of str
    string process(const string& str){
        if (str == "")
            return "";

        int l = 0;
        int r = 0;
        int count = 0;
        string result = "";
        for (; r < str.length(); ){
            if (str[r] == str[l]){
                count++;
                r++;
            }
            else{//每当发现str[r]和str[l]不一样时,将l到r-1的append到result
                char tmp[5];
                memset(tmp, 0, 5);
                sprintf(tmp, "%d%d", count, str[l] - '0');
                result.append(tmp);
                count = 0;
                l = r;
            }
        }
        char tmp[5];
        memset(tmp, 0, 5);
        sprintf(tmp, "%d%c", count, str[l]);
        result.append(tmp);

        return result;
    }

    string countAndSay(int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        if (n < 1)
            return "";

        string str = "1";
        if (n == 1)
            return str;
        
        for (int i = 1; i < n; i++){
            string tmp = process(str);
            str.assign(tmp);
        }

        return str;
    }
};

 

 

 

 

 

 

EOF

posted on 2012-12-30 20:37  kkmm  阅读(228)  评论(0编辑  收藏  举报