leetcode 372. Super Pow 快速幂实现

来源:互联网 发布:阿里云解析新网域名 编辑:程序博客网 时间:2024/05/16 16:22

Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.

Example1:

a = 2
b = [3]

Result: 8
Example2:

a = 2
b = [1,0]

Result: 1024

这道题就是实现幂运算,但是不会做,网上看到了一个做法,很不错。

代码如下:

//快速幂,涉及到数学知识,不会做public class Solution{    public int superPow(int a, int[] b)    {        if(a == 1 || b.length == 0)            return 1;        a = a % 1337;        int[] nums = new int[11];        int prev = 1,i = 0;        while(i <= 10){//至于为什么是10,因为更多的话会浪费空间,更小的话,会增加递归层数,至于10是否最优,没有测量。            nums[i++] = prev;            prev = prev * a % 1337;        }        int[] divisor = new int[b.length - 1];        int remainder = divide(b,10,divisor);        return superPow(nums[10],divisor)*nums[remainder]%1337;    }    private int divide(int[] num,int baseNum,int[] divisor)    {        System.arraycopy(num,0,divisor,0,divisor.length);        return num[num.length - 1];    }}
原创粉丝点击