leetcode-236-Ugly Number

来源:互联网 发布:2016淘宝小号注册方法 编辑:程序博客网 时间:2024/04/28 03:14

问题

题目:[leetcode-236]

思路

素数筛法的思路。但是第一遍TLE。
仔细想了下,这个两边循环的代码时间是没有问题的,因为之前的帖子也学习了。不是完全的O(N2)的复杂度。

所以,考虑整数的最大值2147483647。500002>INTMAX
所以,我猜测可能是辅助空间开大了。因为之前看的和num一样大,那么当num给INT_MAX的时候,时间就上去了。这么分析之后,修改了代码,正确。

所以,改bug是件很重要的事情。根据错误,快速定位,猜测可能出现错误的地方,进行修改就行。原则,只要有一丝希望,就要去尝试。

两个注意点:

  • 辅助空间大小的开辟(n
  • 大素因子的判断(只能有一个大于n的因子),对本体来说,只要出现返回false.

代码

class Solution {public:    bool isUgly(int num) {        if(1==num) return true;        else if(num < 1) return false;        else{            const int maxn = 50000;            vector<int> prime_table;            vector<bool> marker(maxn+1, 0);            for(int i = 2; i <=maxn; ++i){                if(marker[i]) continue;                else{                    prime_table.push_back(i);                    for(int j = i*2; j <= maxn; j += i){                        marker[j] = true;                    }                }            }            int prime_cnt = prime_table.size();            int index = 0;            while( num != 1 && index < prime_cnt ){                int& prime = prime_table[index];                while( num != 1 && num % prime == 0 ){                    num /= prime;                    if(prime>5) return false;                }                index++;            }            if(num != 1) return false;            else return true;        }    }};
0 0
原创粉丝点击