1. 程式人生 > 其它 >程式設計實踐筆記No.8

程式設計實踐筆記No.8

技術標籤:程式設計實踐

程式設計實踐筆記No.8


寫在最前面,程式設計一直是我的短板,希望在leetcode練習中獲得進步!

參考Datawhale組隊學習中“LeetCodeTencent”

題目一062 不同的路徑

連結

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。
機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。
問總共有多少條不同的路徑?

動態規劃

程式碼

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

連結


在這裡插入圖片描述

題目二 070 爬樓梯

連結

假設你正在爬樓梯。需要 n 階你才能到達樓頂。
每次你可以爬 1 或 2 個臺階。你有多少種不同的方法可以爬到樓頂呢?

動態規劃

程式碼

class Solution:
    def climbStairs(self, n: int) -> int:
        p = 0 #dp[n-1]
        q = 0 #dp[n-2]
        r = 1 #結果
        for  i in range(1,n+1):
            p = q 
            q = r 
            r = p + q
        
        return
r

在這裡插入圖片描述

題目三 078 子集

連結

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集(冪集)。

遞迴+回溯法

程式碼

class Solution {
public:
    vector<vector<int>> subsets(vector<int>& nums) {
        vector<int> item; //存放單個子集
        vector<vector<int>> results; //存放答案
        results.push_back(item); //存入
        generate(0,nums,item,results);
        return results;

    }
private:
void generate(int i, vector<int> &nums,vector<int>&item,vector<vector<int>> &results)
{
    if(i >= nums.size())
    {
        return;
    }
    item.push_back(nums[i]);
    results.push_back(item);
    generate(i+1,nums,item,results);

    item.pop_back();
    generate(i+1,nums,item,results);
}
};

連結
在這裡插入圖片描述