写在最前面,编程一直是我的短板,希望在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);
}
};