挨個找的方法, 效率比較低
def findkthugly(k):
count = 0
n = 1
while true:
if isugly(n):
count += 1
if count == k:
return n
else:
n += 1
def isugly(number):
while number%2 == 0:
number = number/2
while number%3 == 0:
number = number/3
while number%5 == 0:
number == number/5
if number == 1:
return true
else:
return false
另外一種演算法是從醜數出發*2,*3,*5計算後面的醜數,每次競爭上崗,將最小的值加入醜數列表,只是需要想辦法找到比當前list中最大醜數大的第乙個醜數,利用index2,index3,index5來維護每個數*2,*3,*5加入list,如果ugly[index2]*2加入list就將index2指向下乙個醜數,以此類推。
def findkthugly(k):
ugly =
index = 1
index2 = 0
index3 = 0
index5 = 0
while index < k:
val = min(ugly[index2]*2, ugly[index3]*3, ugly[index5]*5)
if ugly[index2]*2 == val:
index2 += 1
if ugly[index3]*3 == val:
index3 += 1
if ugly[index5]*5 == val:
index5 += 1
index += 1
return ugly[-1]
LeetCode Python 60 第k個排列
給出集合 1,2,3,n 其所有元素共有 n 種排列。按大小順序列出所有排列情況,並一一標記,當 n 3 時,所有排列如下 123 132 213 231 312 321 給定 n 和 k,返回第 k 個排列。說明 示例 1 輸入 n 3,k 3 輸出 213 示例 2 輸入 n 4,k 9 輸出 ...
LeetCode python 第1題 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
LeetCode Python 打家劫舍I
你是乙個專業的小偷,計畫偷竊沿街的房屋。每間房內都藏有一定的現金,影響你偷竊的唯一制約因素就是相鄰的房屋裝有相互連通的防盜系統,如果兩間相鄰的房屋在同一晚上被小偷闖入,系統會自動報警。給定乙個代表每個房屋存放金額的非負整數陣列,計算你在不觸動警報裝置的情況下,能夠偷竊到的最高金額。示例 1 輸入 1...