1. 程式人生 > 其它 >【DW組隊學習—LeetCode】day08

【DW組隊學習—LeetCode】day08

技術標籤:DW組隊學習LeetCodePython

62. 不同路徑

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。
問總共有多少條不同的路徑?
【示例 1】在這裡插入圖片描述
輸入:m = 3, n = 7 輸出:28
【示例 2】輸入:m = 3, n = 2 輸出:3
解釋: 從左上角開始,總共有 3 條路徑可以到達右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  3. 向下 -> 向右 -> 向右

【示例 3】 輸入:m = 7, n = 3 輸出:28

【示例 4】 輸入:m = 3, n = 3 輸出:6

嘗試思路:
利用理論模型,如下圖所示
在這裡插入圖片描述
第一行和第一列上的各點均只有一條路可以到達,內部各點需經由其左或其上點到達,所以到達內部點的路徑條數是到達其上和其左兩點的路徑之和
1、建立m*n矩陣,內部元素均為1
2、從(2,2)迴圈內部點,使其值為其上和其左的和
3、輸出最後一個點的值

程式碼:

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        l = [[1] * n] * m
        for i in range(1, m)
: for j in range(1, n): l[i][j] = l[i - 1][j] + l[i][j - 1] return l[m-1][n-1]

在這裡插入圖片描述
【注】在除錯過程中仍發現列表呈一列一列更改的問題

70. 爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?
注意:給定 n 是一個正整數。
【示例 1】輸入: 2 輸出: 2
解釋: 有兩種方法可以爬到樓頂。
1.1 階 + 1 階
2.2 階
【示例 2】輸入: 3 輸出: 3
解釋: 有三種方法可以爬到樓頂。

1.1 階 + 1 階 + 1 階
2.1 階 + 2 階
3.2 階 + 1 階

想用數學方法做,但是忘記怎麼算了。。。

78. 子集

給你一個整數陣列 nums ,返回該陣列所有可能的子集(冪集)。解集不能包含重複的子集。
【示例 1】輸入:nums = [1,2,3] 輸出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]
【示例 2】輸入:nums = [0] 輸出:[[],[0]]
提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

嘗試思路:列舉,向後相容
迴圈取一個元素,依次加入前面子集形成新的子集

程式碼:

class Solution:
    def subsets(self, nums: List[int]) -> List[List[int]]:
        result = [[]]
        for i in range(len(nums)):
            for j in range(len(result)):
                l = copy.deepcopy(result[j])
                l.append(nums[i])
                li = copy.deepcopy(l)
                result.append(li)
        return result

在這裡插入圖片描述