黄山建设厅官方网站,弹幕怎么做视频网站,苏州最大的网站建设公司,王也踏青图是哪一集70.爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢#xff1f;
示例 1#xff1a;
输入#xff1a;n 2
输出#xff1a;2
解释#xff1a;有两种方法可以爬到楼顶。
1. 1 阶 1 阶
2. 2 阶
示…70.爬楼梯
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢
示例 1
输入n 2
输出2
解释有两种方法可以爬到楼顶。
1. 1 阶 1 阶
2. 2 阶
示例 2
输入n 3
输出3
解释有三种方法可以爬到楼顶。
1. 1 阶 1 阶 1 阶
2. 1 阶 2 阶
3. 2 阶 1 阶提示
1 n 45
class Solution {
public:int climbStairs(int n) { // 定义函数参数为楼梯的阶数n返回值为方法总数if (n 1) return 1; // 如果只有一阶楼梯只有一种方法直接返回1if (n 2) return 2; // 如果有两阶楼梯有两种方法直接返回2int dp[n 1]; // 创建一个动态规划数组用于记录爬到每个阶梯的方法总数长度为n1dp[1] 1; // 初始状态爬到第一阶楼梯只有一种方法dp[2] 2; // 初始状态爬到第二阶楼梯有两种方法// 动态规划递推计算爬到每个阶梯的方法总数for (int i 3; i n; i) { // 从第3阶楼梯开始计算dp[i] dp[i - 1] dp[i - 2]; // 爬到第i阶楼梯的方法总数等于爬到第i-1阶和第i-2阶楼梯方法总数之和}return dp[n]; // 返回爬到第n阶楼梯的方法总数}
};509.斐波那契数
斐波那契数 通常用 F(n) 表示形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始后面的每一项数字都是前面两项数字的和。也就是
F(0) 0F(1) 1
F(n) F(n - 1) F(n - 2)其中 n 1给定 n 请计算 F(n) 。
示例 1
输入n 2
输出1
解释F(2) F(1) F(0) 1 0 1示例 2
输入n 3
输出2
解释F(3) F(2) F(1) 1 1 2示例 3
输入n 4
输出3
解释F(4) F(3) F(2) 2 1 3提示
0 n 30
class Solution {
public:int fib(int n) {// 斐波那契数列的初始值int fib0 0; // F(0)int fib1 1; // F(1)// 特殊情况处理当 n 为 0 或 1 时直接返回 nif (n 0) return fib0;if (n 1) return fib1;// 从 F(2) 开始计算依次计算直到 F(n)for (int i 2; i n; i) {// 计算当前斐波那契数 F(i) F(i-1) F(i-2)int fibi fib0 fib1;// 更新 fib0 和 fib1 的值为下一次迭代所需的值fib0 fib1;fib1 fibi;}// 返回计算得到的斐波那契数 F(n)return fib1;}
};1137.第N个泰波那契数
泰波那契序列 Tn 定义如下
T0 0, T1 1, T2 1, 且在 n 0 的条件下 Tn3 Tn Tn1 Tn2
给你整数 n请返回第 n 个泰波那契数 Tn 的值。
示例 1
输入n 4
输出4
解释
T_3 0 1 1 2
T_4 1 1 2 4示例 2
输入n 25
输出1389537提示
0 n 37答案保证是一个 32 位整数即 answer 2^31 - 1。
class Solution {
public:int tribonacci(int n) {if (n 0) return 0; // 如果 n 等于 0直接返回 T0 0if (n 1 || n 2) return 1; // 如果 n 等于 1 或 2直接返回 T1 T2 1int dp[3]; // 定义一个数组用于存放前三个泰波那契数dp[0] 0; // 初始化 T0dp[1] dp[2] 1; // 初始化 T1 和 T2// 从第 3 个数开始逐步计算直到第 n 个数for (int i 3; i n; i) {int temp dp[0] dp[1] dp[2]; // 计算当前数值dp[0] dp[1]; // 更新前三个数值dp[1] dp[2];dp[2] temp;}return dp[2]; // 返回第 n 个泰波那契数 Tn}
};746.使用最小花费爬楼梯
给你一个整数数组 cost 其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
示例 1
输入cost [10,15,20]
输出15
解释你将从下标为 1 的台阶开始。
- 支付 15 向上爬两个台阶到达楼梯顶部。
总花费为 15 。示例 2
输入cost [1,100,1,1,1,100,1,1,100,1]
输出6
解释你将从下标为 0 的台阶开始。
- 支付 1 向上爬两个台阶到达下标为 2 的台阶。
- 支付 1 向上爬两个台阶到达下标为 4 的台阶。
- 支付 1 向上爬两个台阶到达下标为 6 的台阶。
- 支付 1 向上爬一个台阶到达下标为 7 的台阶。
- 支付 1 向上爬两个台阶到达下标为 9 的台阶。
- 支付 1 向上爬一个台阶到达楼梯顶部。
总花费为 6 。提示
2 cost.length 10000 cost[i] 999
class Solution {
public:int minCostClimbingStairs(vectorint cost) {int n cost.size(); // 获取台阶数// 初始化到达第 0 和第 1 个台阶的最低花费int dp0 cost[0]; // 到达第 0 个台阶的最低花费是 cost[0]int dp1 cost[1]; // 到达第 1 个台阶的最低花费是 cost[1]// 从第 2 个台阶开始计算到达每个台阶的最低花费for (int i 2; i n; i) {// 到达当前台阶的最低花费是前两个台阶的最低花费加上当前台阶的花费取最小值int dp2 min(dp0, dp1) cost[i];// 更新前两个台阶的最低花费准备下一轮计算dp0 dp1;dp1 dp2;}// 返回到达楼梯顶部的最低花费即最后两个台阶的最小花费return min(dp0, dp1);}
};198.打家劫舍
你是一个专业的小偷计划偷窃沿街的房屋。每间房内都藏有一定的现金影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统如果两间相邻的房屋在同一晚上被小偷闯入系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组计算你 不触动警报装置的情况下 一夜之内能够偷窃到的最高金额。
示例 1
输入[1,2,3,1]
输出4
解释偷窃 1 号房屋 (金额 1) 然后偷窃 3 号房屋 (金额 3)。偷窃到的最高金额 1 3 4 。
示例 2
输入[2,7,9,3,1]
输出12
解释偷窃 1 号房屋 (金额 2), 偷窃 3 号房屋 (金额 9)接着偷窃 5 号房屋 (金额 1)。偷窃到的最高金额 2 9 1 12 。提示
1 nums.length 1000 nums[i] 400
class Solution {
public:int rob(std::vectorint nums) { // 定义rob函数参数为存储房屋金额的向量numsint n nums.size(); // 获取房屋数量if (n 0) return 0; // 如果房屋数量为0直接返回0没有可以偷的房屋if (n 1) return nums[0]; // 如果房屋数量为1直接返回第一个房屋的金额因为只有一个房屋std::vectorint dp(n, 0); // 定义一个长度为n的向量dp用于存储到达每个房屋时能够获取的最高金额初始值全部为0dp[0] nums[0]; // 到达第一个房屋时能够获取的最高金额为第一个房屋的金额dp[1] std::max(nums[0], nums[1]); // 到达第二个房屋时能够获取的最高金额为前两个房屋金额的较大值for (int i 2; i n; i) { // 从第三个房屋开始遍历到最后一个房屋dp[i] std::max(dp[i-1], dp[i-2] nums[i]); // 计算到达当前房屋时能够获取的最高金额根据状态转移方程进行计算}return dp[n-1]; // 返回到达最后一个房屋时能够获取的最高金额}
};