leetCode 70. Climbing Stairs | 动态规划

简介:

70. Climbing Stairs

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?

思考:

top steps
1 1
2
2
3
3
4
5
5
8
6
13
...
...
从上面的分析可以看出,f(top) = f(top - 1) + f(top - 2)

使用动态规划,确定当前登到第i级台阶可能的步数是几。然后在查看下一级i+1台阶的可能步数。


代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class  Solution {
public :
     int  climbStairs( int  n) 
     {
         if  (n <= 0)
             return  0;
         if  (n <= 2)
             return  n;
     
         int  a[2] = {1,2};
         int  tmp = 0;
         for  ( int  i = 0; i < n - 2; ++i)
         {
             tmp = a[0] + a[1];
             a[0] = a[1];
             a[1] = tmp;
         }
     
         return  tmp;
     }
};

总结:

先确定当前的结果,然后转移。确定下一步的结果。依次转移,直到结果。



本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1844815

相关文章
|
机器学习/深度学习 算法 Go
【LeetCode 热题100】139:单词拆分(动态规划全解析+细节陷阱)(Go语言版)
本题是 LeetCode 热题 139:单词拆分(Word Break),需判断字符串 `s` 是否能由字典 `wordDict` 中的单词拼接而成。通过动态规划(DP)或记忆化搜索解决。DP 中定义布尔数组 `dp[i]` 表示前 `i` 个字符是否可拆分,状态转移方程为:若存在 `j` 使 `dp[j]=true` 且 `s[j:i]` 在字典中,则 `dp[i]=true`。初始条件 `dp[0]=true`。代码实现中用哈希集合优化查找效率。记忆化搜索则从起始位置递归尝试所有切割点。两种方法各有利弊,DP 更适合面试场景。思考扩展包括输出所有拆分方式及使用 Trie 优化大字典查找。
408 6
|
缓存
力扣每日一题 6/14 动态规划+数组
力扣每日一题 6/14 动态规划+数组
159 1
|
算法 索引
力扣每日一题 6/28 动态规划/数组
力扣每日一题 6/28 动态规划/数组
167 0
|
存储
力扣每日一题 6/19 排序+动态规划
力扣每日一题 6/19 排序+动态规划
178 0
|
算法
力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学
力扣每日一题 6/16 字符串 + 随机一题 动态规划/数学
147 0
|
机器人
【LeetCode】--- 动态规划 集训(二)
【LeetCode】--- 动态规划 集训(二)
128 0
【LeetCode】--- 动态规划 集训(一)
【LeetCode】--- 动态规划 集训(一)
149 0
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总(4)
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总
|
存储 算法
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总(1)
【42页动态规划学习笔记分享】动态规划核心原理详解及27道LeetCode相关经典题目汇总
|
存储 算法 数据挖掘
力扣174题动态规划:地下城游戏(含模拟面试)
力扣174题动态规划:地下城游戏(含模拟面试)
下一篇
开通oss服务