把只包含因子2、3和5的数称作丑数(Ugly Number)。
例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
class Solution:
def GetUglyNumber(self, index):
if index == None or index <= 0:
return None
ugluNumber = [1] * index
nextIndex = 1
index2 = 0
index3 = 0
index5 = 0
while nextIndex < index:
minVal = min(ugluNumber[index2] * 2, ugluNumber[index3] * 3, ugluNumber[index5] * 5)
ugluNumber[nextIndex] = minVal
while ugluNumber[index2] * 2 <= ugluNumber[nextIndex]:
index2 += 1
while ugluNumber[index3] * 3 <= ugluNumber[nextIndex]:
index3 += 1
while ugluNumber[index5] * 5 <= ugluNumber[nextIndex]:
index5 += 5
return ugluNumber[-1]
package main
func UglyNum(nums int) int {
res := make([]int, nums)
if nums < 1 {return 0}
index2, index3, index5 := 0, 0, 0
index := 1
res[0] = 1
for index <= nums - 1 {
minVal = min(min(res[index2] * 2, res[index3] * 3), res[index5] * 5)
res[index] = minVal
index++
if minVal == res[index2] * 2{
index2++
}
if minVal == res[index3] * 3 {
index3++
}
if minVal == res[index5] * 5 {
index5++
}
}
return res[-1]
}
func min(a, b int) int {
if a >= b {
return a
}
return b
}
网友评论