题解 | #剪绳子#

剪绳子

http://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8

  1. 一遇到,怎么选的时候,在分析的时候除了把基本的条件出来之后,那紧接着就需要用到递归。
  2. 递归会具有很大的时间复杂度,因此要用备忘录的形式剪枝。
  3. 其余看注释即可。
class Solution {
public:

    int back_tack(int n, vector<int>& memo){

        if(n<=4){
            return n;
        }

        //带备忘录的递归
        if(memo[n]!=-1){
            return memo[n];
        }


        int res = 0;
        for(int i=1;i<n;i++){
            res = max(res, i*back_tack(n-i,memo));
        }

        //记录当前长度算的最大的成绩
        memo[n] = res;

        return res;

    }


    int cutRope(int number) {

        if(number == 2) return 1;
        if(number == 3) return 2;

        //加一个备忘录

        vector<int> memo(number+1,-1);
        return back_tack(number,memo);

     }
};
剑指Offer 文章被收录于专栏

剑指offer的解析结合

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 14:08
点赞 评论 收藏
分享
程序员小白条:主要没亮点,项目也是网上的,平平无奇,那只能海投了,奖项总得有一些,然后就是现在最好是前后端都会,自己能做项目并且运维的,要么找星球项目改改,要么找个开源项目改改,自己能拓展功能才是主要的,跟做效率很低很低
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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