372 超级次方
传送门:https://leetcode-cn.com/problems/super-pow/
Problem
你的任务是计算 $a^b$ 对 1337
取模,a
是一个正整数,b
是一个非常大的正整数且会以数组形式给出。
示例 1:
1 | 输入:a = 2, b = [3] |
示例 2:
1 | 输入:a = 2, b = [1,0] |
示例 3:
1 | 输入:a = 1, b = [4,3,3,8,5,2] |
示例 4:
1 | 输入:a = 2147483647, b = [2,0,0] |
数据范围
1 <= a <= 2^31 - 1
1 <= b.length <= 2000
0 <= b[i] <= 9
b
不含前导 0
思路
今天也是抄三叶姐姐题解的一天,真好~
$a^k=a^{(k/1010)+k \mod10}=a^{k/1010}a^{k \mod10}=(a^{k/10})^{10}a^{k\mod10}$
举个例子
$15^{1234}=15^{1230}*15^4$
$15^{1234}=(15^{123})^{10}*15^4$
出现了递归子结构,最后需要实际计算的次方小于10。
递归+快速幂
1 | class Solution { |
迭代+快速幂
$15^{1234}=15^{1230}*15^4$
$15^{1234}=(15^{123})^{10}*15^4$
$15^{1234}=((15^{12})^{10}15^3)^{10}15^4$
$15^{1234}=(((15^1)^{10}15^2)^{10}15^3)^{10}*15^4$
迭代版本更加好理解一些~
1 | class Solution { |