- Problem: power (x, n), x為正整數
- Solution:
- 一種是 iteratively 的用 while loop, count down n 的值, 每次乘上 x
- 另一種直覺的是用 recursive, 但注意指數可以用平方來加速, 即 x^2 = x * x
- Note: 注意各 boundary, e.g. n < 0, n = MIN_INT 及 unsigned/signed 切換等 case
class Solution { public: double myPow(double x, int n) { if (0 == n) return 1; if (1 == n) return x; double sq = myPow(x, n/2); if (INT_MIN == n) return sq * sq; if (0 > n) return 1.0 / myPow(x, abs((unsigned int)-n)); if (0 == n % 2) return sq * sq; else return x * sq * sq; } };
沒有留言:
張貼留言