zoukankan      html  css  js  c++  java
  • 264. Ugly Number II

    • 思路1

    出错代码:

     class Solution 
    {
    public:
        int nthUglyNumber(int n) 
    	{
    		if(n == 1)
    		{
    			return 1;
    		}
    		
            int i = 1;
    		int flag = 1;
            while(1)
    		{
    			i++;
    			if(isUgly(i))
    			{
    				flag++;
    			}
    			if(flag == n)
    			{
    				break;
    			}
    		}
    		return i;
        }
    	
    private:
        bool isUgly(int n)
    	{
    		vector<int> nums;
    		
    		if(n == 3 || n == 5 || n == 2)
    		{
    			return true;
    		}
    		
    		while(n)
    		{
    			nums.push_back(n % 10);
    			n = n / 10;
    		}
    		
    		if(nums[0] == 5 || nums[0] == 0)
    		{
    			//可以被5整除
    			return isUgly(n / 5);
    		}
    		else if(is3Divisible(nums))
    		{
    			return isUgly(n / 3);
    		}
    		else
    		{
    			//能被2整除
    			return isUgly(n / 2);
    		}
    		
    		return false;
    	}
    	
    	bool is3Divisible(vector<int>& nums)
    	{
    		int sum = 0;
    		for(int i = 0;i < nums.size();i++)
    		{
    			sum = sum + nums[i];
    		}
    		
    		if((sum % 3) == 0)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    };
    
    

    这次出错出在了

    	bool isUgly(int n)
    	{
    		vector<int> nums;
    		int number = n;
    		if (n == 3 || n == 5 || n == 2)
    		{
    			return true;
    		}
    
    		while (n)
    		{
    			nums.push_back(n % 10);
    			n = n / 10;
    		}
    
    		if (nums[0] == 5 || nums[0] == 0)
    		{
    			//可以被5整除
    			return isUgly(number / 5);
    		}
    		else if (is3Divisible(nums))
    		{
    			return isUgly(number / 3);
    		}
    		else
    		{
    			//能被2整除
    			return isUgly(number / 2);
    		}
    
    		return false;
    	}
    

    code2 代码出错 出错在

    		else
    		{
    			//能被2整除
    			return isUgly(number / 2);
    		}
    

    number = 7时可以测出这个bug。
    code3 修改后的代码,果然不出我所料,超时了。跑了几个数据都通过了,但是当n = 218时,leetcode提示Time Limit Exceeded

    class Solution
    {
    public:
    	int nthUglyNumber(int n)
    	{
    		if (n == 1)
    		{
    			return 1;
    		}
    
    		int i = 1;
    		int flag = 1;
    		while (1)
    		{
    			i++;
    			if (isUgly(i))
    			{
    				flag++;
    			}
    			if (flag == n)
    			{
    				break;
    			}
    		}
    		return i;
    	}
    
    private:
    	bool isUgly(int n)
    	{
    		vector<int> nums;
    		int number = n;
    		if (n == 3 || n == 5 || n == 2)
    		{
    			return true;
    		}
    
    		while (n)
    		{
    			nums.push_back(n % 10);
    			n = n / 10;
    		}
    
    		if (nums[0] == 5 || nums[0] == 0)
    		{
    			//可以被5整除
    			return isUgly(number / 5);
    		}
    		else if (is3Divisible(nums))
    		{
    			return isUgly(number / 3);
    		}
    		else if(is2Divisible(nums))
    		{
    			//能被2整除
    			return isUgly(number / 2);
    		}
    
    		return false;
    	}
    
    	bool is3Divisible(vector<int>& nums)
    	{
    		int sum = 0;
    		for (int i = 0; i < nums.size(); i++)
    		{
    			sum = sum + nums[i];
    		}
    
    		if ((sum % 3) == 0)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    
    	bool is2Divisible(vector<int>& nums)
    	{
    		if (nums[0] % 2 == 0)
    		{
    			return true;
    		}
    		else
    		{
    			return false;
    		}
    	}
    };
    

    再一次出错的代码

    class Solution
    {
    public:
    	int nthUglyNumber(int n)
    	{
    		vector<int> ugly;
    		ugly.push_back(1);
    
    		int Multiply2 = 0;
    		int Multiply3 = 0;
    		int Multiply5 = 0;
    		int i2 = 0;
    		int i3 = 0;
    		int i5 = 0;
    
    		while (true)
    		{
    			if (n < ugly.size())
    			{
    				return ugly[n - 1];
    			}
    			else
    			{
    				Multiply2 = ugly[i2] * 2;
    				Multiply3 = ugly[i3] * 3;
    				Multiply5 = ugly[i5] * 5;
    
    				int min = GetMin(Multiply2, Multiply3, Multiply5);
    				ugly.push_back(min);
    
    				if (min == Multiply2)
    				{
    					i2++;
    				}
    				else if (min == Multiply3)
    				{
    					i3++;
    				}
    				else
    				{
    					i5++;
    				}
    
    			}
    		}
    
    	}
    private:
    	int GetMin(int number1, int number2,int number3)
    	{
    		int min = (number1 < number2) ? number1 : number2;
    		min = (min < number3) ? min : number3;
    		return min;
    	}
    };
    

    n = 10可以测出这个bug
    最终AC版的code

    class Solution
    {
    public:
    	int nthUglyNumber(int n)
    	{
    		vector<int> ugly;
    		ugly.push_back(1);
    
    		int Multiply2 = 0;
    		int Multiply3 = 0;
    		int Multiply5 = 0;
    		int i2 = 0;
    		int i3 = 0;
    		int i5 = 0;
    
    		while (true)
    		{
    			if (n < ugly.size())
    			{
    				return ugly[n - 1];
    			}
    			else
    			{
    				Multiply2 = ugly[i2] * 2;
    				Multiply3 = ugly[i3] * 3;
    				Multiply5 = ugly[i5] * 5;
    
    				int min = GetMin(Multiply2, Multiply3, Multiply5);
    				ugly.push_back(min);
    
    				if (min == Multiply2)
    				{
    					i2++;
    				}
    				if (min == Multiply3)
    				{
    					i3++;
    				}
    				if(min == Multiply5)
    				{
    					i5++;
    				}
    
    			}
    		}
    
    	}
    private:
    	int GetMin(int number1, int number2,int number3)
    	{
    		int min = (number1 < number2) ? number1 : number2;
    		min = (min < number3) ? min : number3;
    		return min;
    	}
    };
    
    
  • 相关阅读:
    Python多态
    python 元类与定制元类
    Python:类属性,实例属性,私有属性与静态方法,类方法,实例方法
    Python 类 --基础与要点
    服务器错误401
    H5中使用Web Storage来存储结构化数据
    Web Storage
    定义表单控件的id和name注意点
    Annotation(注解)代替配置文件
    jQuery 特殊选择器this
  • 原文地址:https://www.cnblogs.com/Manual-Linux/p/12033432.html
Copyright © 2011-2022 走看看