题解 | #剪绳子#

剪绳子

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的解析结合

全部评论

相关推荐

头像
昨天 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
无敌虾孝子:喜欢爸爸还是喜欢妈妈
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务