题目描述:
实现 pow(x, n) ,即计算 x 的 n 次幂函数。
解题思路:
该题目首先想到就是采用暴力解决的方法,依次乘起来,不过时间复杂度为O(n),并且由于计算的是乘法,所以开销很大。所以会超出时间限制
我们可以换一个思路,采用分治的思想,这样时间复杂度就降到了logn ,只需要不断计算x^(n/2)就行了。
x^n = x^(n/2) * x^(n/2)
如果采用递归来计算,也就是直接采用自顶向下递归,存在冗余计算,x^(n/2)只需要计算一次即可。所以我们需要自底向上的计算方式,可以采用动态规划, 将每次计算的x^(n/2)保存下来
动态规划方法:
1.状态定义:定义dp[i]为x的i次幂,将每次计算的x^(n/2)保存下来
2.状态转移方程:当i为偶数的时候,直接分治。当i为奇数的时候,i/2会向下取余,所以还需要乘上x
if(list.get(list.size()-i)%2==0)
dp[i] = dp[i-1