LeetCode 0038

来源:互联网 发布:java进度条显示百分比 编辑:程序博客网 时间:2024/06/05 06:18

38.Count and Say

原文链接

我的思路:

我觉得只能暴力模拟了。

最快速度的代码:

class Solution {public:    string countAndSay(int n) {        string ans = "1";        string temp;        int i;        int sum;        while ( n > 1 ) {            sum = 1;            temp = "";            for ( i = 1; i < ans.length(); ++i ) {                if ( ans[i] == ans[i-1] ) {                    sum++;                } else {                    temp.push_back( '0' + sum );                    temp.push_back( ans[i-1] );                    sum = 1;                }            }            temp.push_back( '0' + sum );            temp.push_back( ans[i-1] );            ans = temp;            n--;        }        return ans;    }};

首先大家的思路是差不多的,其次,这里涉及到了一个地方,就是整数转字符串的问题。在代码中就是sum这个变量。我们可以从代码中看出,源代码作者是肯定sum不会大于10的,因此利用了这个性质。而我在解题的时候,其实想到了sum应该是有一定范围的,但是没有立马给出结论。这里的结论是相同的数字不会超过3次。我假设有一个数字达到了4次,那么一定至少是xxxx。此时有这么两种情况:xx+xx,或者x+xxx。我先对x+xxx这种情况进行分析,这时候会是xxx,也就是说它的前一个会有连续xx个相同的数字,也就是说,不停往前推,一开始就有至少xx个相同数字,但是我们都知道是不可能的。xx+xx 的情况,更是不可能,因为这样已经可以合并在一起了。因此得证。这个证明比较简陋,如果有错欢迎指正。

原创粉丝点击