剑指 Offer 14- II. 剪绳子 II(需要取余)

题目

剑指 Offer 14- II. 剪绳子 II

我的思路

循环取余or快速取余(二分思想)

我的实现

class Solution {
public:
    long p(int num){
        if(num==0) return 1;
        return (3*p(num-1))%1000000007;
    }  
    int cuttingRope(int n) {
        if(n==2) return 1;
        if(n==3) return 2;
        else{
            int m = n % 3;
            int y = n / 3;
            if(m==0) return p(y);
            if(m==1) return (p(y-1)*4)%1000000007;
            return (p(y)*2)%1000000007;
        }
    }
};
/*
相比普通的整数拆分,需要考虑在乘积过大前取余数。
两种取余数的方法:1.循环取余数2.快速取余数
1.第一种方法就是每累乘一次就取余数,n次幂总共需要取n次余数
2.第二种方法有二分的思想,n次幂总共需要取logn次余数,为3的1次,2次,4次,8次等取余数即可。
*/

拓展学习

快速取余数

原文地址:https://www.cnblogs.com/BoysCryToo/p/13403000.html