NC68.跳台阶

跳台阶

https://www.nowcoder.com/practice/8c82a5b80378478f9484d87d1c5f12a4?tpId=196&tqId=37098&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Ftab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=&title=

NC68.跳台阶

class Solution {
public:
    int jumpFloor(int number) {
        // f(1) = 1
        // f(2) = 2
        // f(n) = f(n - 1) + f(n - 2)
        int ans = -1;
        if (number >= 1 && number <= 40) {
            if (number == 1) {
                ans = 1;
            }
            if (number == 2) {
                ans = 2;
            }
            int front = 2, after = 1;
            int tmp;
            for (int i = 3; i <= number; ++i) {
                ans = front + after;
                tmp = front;
                front = ans;
                after = tmp;
            }
        }
        return ans;
    }
};

解题思路:

难点1:重点中的重点,就看能不能总结出递推公式了。第一反应想着能不能通过数学方法得到直接公式,在O(1)的时空复杂度内完成题解,在这上面浪费了时间;

// f(1) = 1
// f(2) = 2
// f(n) = f(n - 1) + f(n - 2)

难点2:即使是总结出递推公式,题目对时空复杂度有着严格的限制,没办法直接用递归去做,最终还是得要靠动态规划并压缩动态空间去解决;

难点3:总结公式的时候,个人认为没有必要去看f(0)的情况,不太好理解,直接看f(1)和f(2)即可;

难点4:用了一个ans变量,代码多了几行,但没有官方给出的答案那么绕,便于理解;

最后,真的很烦动态规划!!!

全部评论

相关推荐

LazyBreeze:项目尽量体现你对技术的理解和深度,不是说把中间件用一下就完事了,你项目里面提到集群和分布式,你真在服务器上部署过吗,感觉太假了,第二个项目说自己用了微服务的什么组件,只是用了没有自己的思考,很难让面试官注意到你的简历。针对某几个技术点自己多思考一下,考虑一下有没有别的替代方案,可以写一下,即使没有真的实现
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务