两行代码解决:

剪绳子

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

思路:如果能分的话,肯定是2和3越分越多越好,因为2和3是最小的素数,别的数字也都能由这两个数的任意倍数组合(例如4可以由两个2组成,5可以由一个2一个3组成,9可以由三个3组成)。

  1. 所以直接暴力递归代码如下,两行解决:
    public class Solution {
     public int cutRope(int target) {
         if(target <= 3) return target;
         else return Math.max(2*cutRope(target-2), 3*cutRope(target-3));
     }
    }
  2. 动规代码:
    import java.util.*;
    public class Solution {
     public int cutRope(int target) {
         int[]dp = new int[target+1];
         dp[2] = 2;
         dp[3] = 3;
         for(int i=4;i<=target;i++)
             //状态转移方程
             dp[i] = Math.max(2*dp[i-2], 3*dp[i-3]);
         return dp[target];
     }
    }
全部评论

相关推荐

不愿透露姓名的神秘牛友
04-30 11:43
春招失败、父母离婚,好像我的人生一团糟,一年来压力大到常常崩溃。不知道能跟谁聊,朋友其实对我非常好,但是她无意中表达出来的家庭幸福都会刺痛到我……和ai聊天,我的未来在更高处,不在楼下,忍不住爆哭😭
youngfa:害,妹妹,我是一个研究生(很上进很想找到好工作的那种),但去年因为生病回家休养错过了秋招(当时对我的冲击也是非常大的),这学期返校来了也是把论文盲审交了后才开始找工作,现在也是一个offer没有,但我就没有像你一样把这个阶段性的事情绑定到人生上,人生不仅很长,也很广阔,先停下来,放松一下哦。不要被外部环境灌输的思维操控了,好好爱自己!
点赞 评论 收藏
分享
Elastic90:公司不要求加班,但 又不允许你准点下班,经典又当又立
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务