丑数
class Solution:
def nthUglyNumber(self, n: int) -> int:
dp= [0]*(n+1)
dp[1] = 1
p2, p3, p5 = 1, 1, 1
for i in range(2,n+1):
num2, num3, num5 = 2*dp[p2],dp[p3]*3,dp[p5]*5
dp[i] = min(num2, num3, num5)
if dp[i] == num2:
p2 += 1
if dp[i] == num3:
p3 += 1
if dp[i] == num5:
p5 += 1
return dp[n]
环状的打家劫舍
class Solution:
def rob(self, nums: List[int]) -> int:
lenth = len(nums)
if lenth == 1:
return nums[0]
if lenth == 2:
return max(nums[1],nums[0])
#不偷第一家
#不偷最后一家
def dp_list(numlist):
list_all = [0]*len(numlist)
list_all[0] = numlist[0]
list_all[1] = max(numlist[0],numlist[1])
for i in range(2,len(numlist)):
list_all[i] = max(list_all[i-1],list_all[i-2]+numlist[i])
return list_all[len(numlist)-1]
return max(dp_list(nums[0:-1]),dp_list(nums[1:lenth]))