剑指offer49 丑数
首先想到暴力解法,从1开始遍历所有数,判断其是否是丑数,直到找到第目标个丑数。
思路二用空间换时间,看了剑指offer才想出来:
即用丑数产生丑数。具体思路稍显复杂,看剑指offer吧。
代码:
public class Solution { public int GetUglyNumber_Solution(int index) { if(index<1) return 0; if(index==1) return 1; int[] ugly = new int[index]; ugly[0]=1; int m2 = 0;//每轮从ugly[m2]开始乘获取新丑数即可 int m3 = 0; int m5 = 0; int current = 1; while(current<index){ ugly[current] = myMin(ugly[m2]*2,ugly[m3]*3,ugly[m5]*5); while(ugly[m2]*2<=ugly[current]) m2++; while(ugly[m3]*3<=ugly[current]) m3++; while(ugly[m5]*5<=ugly[current]) m5++; current++; } return ugly[index-1]; } private int myMin(int m2,int m3,int m5){ int min = m2; if(m3<min) min = m3; if(m5<min) min = m5; return min; } }
运行时间:21ms
占用内存:9464k
# -*- coding:utf-8 -*- class Solution: def GetUglyNumber_Solution(self, index): # write code here uglys = [1] if index<1: return 0 m2=m3=m5=0 while index>len(uglys): uglys.append(min(uglys[m2]*2,uglys[m3]*3,uglys[m5]*5)) while uglys[m2]*2<=uglys[-1]: m2+=1 while uglys[m3]*3<=uglys[-1]: m3+=1 while uglys[m5]*5<=uglys[-1]: m5+=1 return uglys[-1]
运行时间:26ms
占用内存:5728k

浙公网安备 33010602011771号