剪绳子
剑指offer
剪绳子
贪心算法
public class Solution {
public int cutRope(int target) {
//分解一定程度得到的就是2与3之间的关系,3越多越好
//当%3的余数是0 6%3=2······0 3+3 =》3*3=9
//这个时候全是3,乘积最大毕竟 2*2*2<3*3
//当%3的余数是1 7%3=2······1
// 3+3+1 =》3*3=9
// 2+2+3=》2*2*3=12
//分出一个1 然后凑成2个2
//当%3的余数是2 8%3=2······2
// 3+3+1 =》3*3=9
// 2+2+3=》2*2*3=12
//注意到取余得到的值决定2的个数,用当前数除以3的到的值决定3的个数
//试数,1---》0*1;2---》1*1;3---》1*2
if(target<=3&&target>0){
return target -1;
}
int p = 0;//商
int q = 0;//余数
p = target/3;
q = target%3;
double res = 0;//保存最终结果,这个地方用到了pow函数,返回值类型为doble,所以为了符合题意,要强转为整形int
if(q == 0){
//余数为0,说明全是3
res = Math.pow(3,p);
}
if(q == 1){
//余数为1,2的个数加一个,3的个数少一个
res =2*2* Math.pow(3,p-1);
}
if(q == 2){
//余数为2,拿个2和全部的3相乘
res = 2*Math.pow(3,p);
}
return (int) res;
}
}
尽量的奔跑