首页 > 编程语言 > 详细

剑指Offer67:剪绳子(Java)

时间:2020-02-27 13:50:23      阅读:75      评论:0      收藏:0      [点我收藏+]

参考“kexin_berlin”的博客:https://blog.csdn.net/qq_24243877/article/details/104507450?fps=1&locationNum=2

思路分析:

需知道:长度为n的绳子,请把绳子剪成整数长度的m段,长度为3的段数越多(切割越接近自然底数(约等于2.7)乘积越大!),最后的乘积越大。(为什么是这样,我也不知道)
所以尽可能的划分更多的3,最多能够划分长度为3的块数:n/3。剩下的长度根据n%3划分为三种情况:
n%3==0;全部切割为长度为三。
n%3==1;减少一块3,和剩下的1凑成4,然后分成两块各为2。
n%3==2;最后一块就是2。

题目描述

给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

java代码

import java.lang.Math;
public class Solution {
    public int cutRope(int target) {
        if(target==2){
            return 1*1;
        }
        if(target==3){
            return 2*1;
        }
        int num=target/3;
        int rest=target%3;
        if(rest==0){
            return(int)Math.pow(3,num);
        }
        else if(rest==1){
            return(int)Math.pow(3,num-1)*2*2;
        }
        else {
            return(int)Math.pow(3,num)*2;
        }
        
    }
}

剑指Offer67:剪绳子(Java)

原文:https://www.cnblogs.com/dongmm031/p/12371222.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!