题目
思路
1.将数组转换成LinkedList,这样方便取出和删除最后一个元素。
2.最终解由两部分的乘积组成:
int res1 = quickMul(a,last);
int res2 = quickMul(superP(a,list),10);
superP(递归取最后一个元素)
3.注意乘积越界问题,多处需要mod1337。
具体代码
class Solution {
int mu = 1337;
public int superPow(int a, int[] b) {
LinkedList<Integer> list = new LinkedList<Integer>();
for(int bb:b){
list.add(bb);
}
return superP(a,list);
}
public int superP(int a, LinkedList<Integer> list){
if(list.isEmpty()){
return 1;
}
int last = list.peekLast();
list.pollLast();
int res1 = quickMul(a,last);
int res2 = quickMul(superP(a,list),10);
return res1*res2%mu;
}
public int quickMul(int a, int n){
if(n == 0){
return 1;
}
a %= 1337;
int ans = 1;
int x = a;
while(n>0){
if(n % 2 == 1){
ans = ans*x%mu;
}
x = x*x%mu;
n /= 2;
}
return ans%mu;
}
}