Climbing Stairs:动态规划

xiaoxiao2021-02-28  56

You are climbing a stair case. It takes n steps to reach to the top.

Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?

Note: Given n will be a positive integer.

Example 1:

Input: 2 Output: 2 Explanation: There are two ways to climb to the top. 1. 1 step + 1 step 2. 2 steps

Example 2:

Input: 3 Output: 3 Explanation: There are three ways to climb to the top. 1. 1 step + 1 step + 1 step 2. 1 step + 2 steps 3. 2 steps + 1 step


很简单的一道题,就是因为对递推关系没有彻底理解所以卡壳 题目大意:每次只能上一步或两步,到达当前楼梯层有几种组合。 解题思路:当前楼梯到达的方式有两种,第一种是通过上一层楼梯跨一步到达,第二种是通过上两层楼梯跨两步到达。递推关系显而易见dp[n] = dp[n - 1] + dp[n - 2] 1.维护一个数组 比较显而易见的做法 public int climbStairs(int n) { if(n==0||n==1||n==2) return n; int [] dp = new int[n+1]; dp[0]=0; dp[1]=1; dp[2]=2; for(int i = 3; i<n+1;i++){ dp[i] = dp[i-1]+dp[i-2]; } return dp[n]; }2.只维护3个常量(节省了空间) public int climbStairs(int n) { if(n == 1) return 1; int small = 1,big = 2; while(n-- > 2){ int temp = small + big; small = big; big = temp; } return big; } 原谅我变量名起的很随意。
转载请注明原文地址: https://www.6miu.com/read-2499999.html

最新回复(0)