1. 程式人生 > 其它 >leetcode 學習打卡

leetcode 學習打卡

技術標籤: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