题解 | #剪绳子#
剪绳子
http://www.nowcoder.com/practice/57d85990ba5b440ab888fc72b0751bf8
- 一遇到,怎么选的时候,在分析的时候除了把基本的条件出来之后,那紧接着就需要用到递归。
- 递归会具有很大的时间复杂度,因此要用备忘录的形式剪枝。
- 其余看注释即可。
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的解析结合
 正浩创新EcoFlow公司福利 510人发布
正浩创新EcoFlow公司福利 510人发布