题解 | #剪绳子#

剪绳子

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

解析:

  1. 果想要结果为最大,则数组中不可以出现1。
  2. 4可以拆分成2×2;5可以拆分成2×3;6可以拆分成3×3;7可以拆分成3×4,4又可以拆分成2×2。前面拆分的乘积都是大于等于拆分前,所以我们可以得出:若想乘积最大,则将该数拆分成最小的两个质数,即2和3。

问题:什么时候剪出2,什么时候剪出3?
此问题可以由8和9这两个数得出结论:8的最大乘积为2×3×3;9的最大乘积为3×3×3。
显而易见,当8求余3不等于0时剪出2,然后剩余6求余3等于0,剪出3,得2×3×3。
9求余3等于0,所以剪出3,剩余6求余3等于0,剪出3,得3×3×3。

代码:

import java.util.*;
public class Solution {
    public int cutRope(int target) {
        int n = target;
        int res = 1;
        ArrayList<Integer> list = new ArrayList<>();
        while (n > 0){
            if (n % 3 != 0){
                list.add(2);
                n -= 2;
            }else{
                list.add(3);
                n -=3;
            }
        }
        for (int i = 0; i < list.size(); i++){
            res *= list.get(i);
        }
        return res;
    }
}

(盲猜这个应该是某某数学定律,只是本人不知道)

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务