题解 | #剪绳子#

剪绳子

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

全部评论

相关推荐

头像
11-18 16:08
福州大学 Java
影流之主:干10年不被裁,我就能拿别人一年的钱了,日子有盼头了
点赞 评论 收藏
分享
双非坐过牢:非佬,可以啊10.28笔试,11.06评估11.11,11.12两面,11.19oc➕offer
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务