leetcode 學習打卡
阿新 • • 發佈:2021-01-20
技術標籤:python學習日記學習日記
Leetcode 062-不同路徑,070-爬樓梯,078-子集
062-不同路徑
題目描述
- 一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。問總共有多少條不同的路徑?
程式碼(python)
class Solution:
def uniquePaths( self, m: int, n: int) -> int:
dp = [[1]*n] + [[1]+[0] * (n-1) for _ in range(m-1)]
#print(dp)
for i in range(1, m):
for j in range(1, n):
dp[i][j] = dp[i-1][j] + dp[i][j-1]
return dp[-1][-1]
# return comb(m + n - 2, n - 1)
070-爬樓梯
題目描述
- 假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
程式碼(python)
class Solution:
def climbStairs(self, n: int) -> int:
# dp = [0] * (n + 1)
# dp[0], dp[1] = 1, 1
# for i in range(2, n + 1):
# dp[i] = dp[i - 1] +dp[i - 2]
# return dp[-1]
if n==1 or n==2: return n
a, b, temp = 1, 2, 0
for i in range(3,n+1):
temp = a + b
a = b
b = temp
return temp
078-子集
題目描述
- 給你一個整數陣列 nums ,返回該陣列所有可能的子集(冪集)。解集不能包含重複的子集。
程式碼(python)
class Solution:
def subsets(self, nums: List[int]) -> List[List[int]]:
#迭代
# res = [[]]
# for i in nums:
# res = res + [[i] + num for num in res]
# return res
#遞迴(回溯)
def backtrace(i,tmp):
res.append(tmp)
for j in range(i,n):
backtrace(j+1,tmp+[nums[j]])
res = []
n = len(nums)
backtrace(0,[])
return res