1. 程式人生 > >劍指offer——醜數

劍指offer——醜數

主要有兩種思路,一種應試型,要找第n個醜數,我找一個合適的數只要包含你所求的n就可以。

class Solution():
	def GetUglyNumber_Solution(self,index):
		res=[2**i*3**j*5**k  for i in range(30)  for j  in range(20)  for k  in range(15)]
		res.sort()
		return  res[ index-1]  if index else 0

另一種全能型,計算2, 3,5的乘積,然後利用min排序。

class Solution():
	def GetUglyNumber_Solution(self ,index):
		if index<1: return 0
		res=[1]
		t2=t3=t5=0
		idx=0
		while idx<index:
			minnum=min(res[t2]*2,res[t3]*3,res[t5]*5)
			res.append(minnum)
			if  res[t2]<=minnum: t2+=1
			if  res[t3]<=minnum:t3+=1
			if  res[t5]<=minnum:t5+=1
			idx += 1
		return  res[index-1]