面试题14- I、II剪绳子(贪心、数学推导)

180 阅读1分钟

答案中最多只包含两个2,剩下的都应该是3才是最大
class Solution { 
    public int cuttingRope(int n) {
       if(n<=3) return n - 1;
        int ans = 1;
        if (n % 3 == 1) {
            ans *= 4;
            n -= 4;
        }
        if (n % 3 == 2) {
            ans *= 2;
            n -= 2;
        }
        System.out.println(ans);
        ans *= Math.pow(3, n / 3);
        return ans;
    }
}

public class Num14II剪绳子2 {
    //最多只能有两个2,其余都是3。
    public int cuttingRope(int n) {
        if(n<=3) return n - 1;
        long ans = 1;
        if (n % 3 == 1) {
            ans *= 4;
            n -= 4;
        }
        if (n % 3 == 2) {
            ans *= 2;
            n -= 2;
        }
        while (n > 0) {
            ans *= 3;
            ans %= 1000000007;
            n -= 3;
        }
        return (int)ans;
    }
}