程式設計實踐筆記No.8
阿新 • • 發佈:2021-01-20
技術標籤:程式設計實踐
程式設計實踐筆記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);
}
};