题解 | #剪绳子#
剪绳子
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的解析结合