Implement pow(x, n).
有史以来做过最简单的一题,大概用5分钟ac,我采用fast exponential,这个在sicp的第一章就有描述。思想是:如果n是偶数的话,那么m^n = (m^(n/2))^2, 如果n是奇数,那么m^n = m*m^(n-1)。这样一来是O(logn)的。
需要特殊处理的是n是负数的情况,也很好办,如果指数是负数,那么最终结果会变成倒数。
1 class Solution { 2 public: 3 double pow(double x, int n) { 4 if (n == 0) return 1; 5 else if (n == 1){ 6 return x; 7 } 8 else if (n == -1){ 9 return 1/x; 10 } 11 if (n % 2 == 0){ 12 //even 13 double t = pow(x,n/2) 14 return t*t 15 }else { 16 return pow(x, n-1)*x; 17 } 18 }