classSolution { publicdoublemyPow(double x, int n) { longN= n; if (N == 0) { return1; } if (N < 0) { x = 1 / x; N = -N; } return fastPow(x, N); } privatedoublefastPow(double x, long n) { if (n == 0) { return1; } doublehalfPow= fastPow(x, n / 2); if (n % 2 == 0) { return halfPow * halfPow; } else { return x * halfPow * halfPow; } } }
结果
执行用时 : 0 ms, 击败 100.00% 使用 Java 的用户
内存消耗 : 41.63 MB, 击败 14.98% 使用 Java 的用户
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution(object): defmyPow(self, x, n): """ :type x: float :type n: int :rtype: float """ deffastPow(x, n): if n == 0: return1 half_pow = fastPow(x, n // 2) if n % 2 == 0: return half_pow * half_pow else: return x * half_pow * half_pow if n < 0: x = 1 / x n = -n return fastPow(x, n)
结果
执行用时 : 11 ms, 击败 95.15% 使用 Python 的用户
内存消耗 : 11.53 MB, 击败 83.10% 使用 Python 的用户
Python3
1 2 3 4 5 6 7 8 9 10 11 12 13 14
classSolution: defmyPow(self, x: float, n: int) -> float: deffastPow(x, n): if n == 0: return1 half_pow = fastPow(x, n // 2) if n % 2 == 0: return half_pow * half_pow else: return x * half_pow * half_pow if n < 0: x = 1 / x n = -n return fastPow(x, n)
结果
执行用时 : 37 ms, 击败 73.10% 使用 Python3 的用户
内存消耗 : 16.41 MB, 击败 44.13% 使用 Python3 的用户
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
doublefastPow(double x, longlong n) { if (n == 0) { return1; } double half_pow = fastPow(x, n / 2); if (n % 2 == 0) { return half_pow * half_pow; } else { return x * half_pow * half_pow; } } doublemyPow(double x, int n) { longlong N = n; if (N < 0) { x = 1 / x; N = -N; } return fastPow(x, N); }
classSolution { funcmyPow(_x: Double, _n: Int) -> Double { if x ==0|| x ==1 { return x } var x = x var n = n if n <0 { x =1/ x n =-n } let result = fastPow(x, n) return result } privatefuncfastPow(_x: Double, _n: Int) -> Double { if n ==0 { return1 } let halfPow = fastPow(x, n /2) return n %2==0? halfPow * halfPow : halfPow * halfPow * x } }
funcmyPow(x float64, n int)float64 { if x == 0.0 || x == 1.0 { return x } if n < 0 { x = 1 / x n = -n } return fastPow(x, n) } funcfastPow(x float64, n int)float64 { if n == 0 { return1.0 } halfPow := fastPow(x, n/2) if n%2 == 0 { return halfPow * halfPow } else { return halfPow * halfPow * x } }
# @param {Float} x # @param {Integer} n # @return {Float} defmy_pow(x, n) return x if x == 0.0 || x == 1.0 if n < 0 x = 1 / x n = -n end fast_pow(x, n) end deffast_pow(x, n) return1.0if n == 0 half_pow = fast_pow(x, n / 2) if n % 2 == 0 half_pow * half_pow else half_pow * half_pow * x end end
implSolution { pubfnmy_pow(x: f64, n: i32) ->f64 { if x == 0.0 || x == 1.0 { return x; } letresult = if n < 0 { 1.0 / Solution::fast_pow(x, -n) } else { Solution::fast_pow(x, n) }; result } fnfast_pow(x: f64, n: i32) ->f64 { if n == 0 { return1.0; } lethalf_pow = Solution::fast_pow(x, n / 2); if n % 2 == 0 { half_pow * half_pow } else { half_pow * half_pow * x } } }
结果
执行用时 : 0 ms, 击败 100.00% 使用 Rust 的用户
内存消耗 : 2.00 MB, 击败 78.18% 使用 Rust 的用户
Racket
1 2 3 4 5 6 7 8 9 10 11 12 13
(define/contract (my-pow x n) (-> flonum? exact-integer? flonum?) (if (or (= x 0.0) (= x 1.0)) x (if (< n 0) (/1.0 (fast-pow-iter x (- n) 1.0)) (fast-pow-iter x n 1.0)))) (define (fast-pow-iter x n result) (if (= n 0) result (if (even? n) (fast-pow-iter (* x x) (/ n 2) result) (fast-pow-iter x (- n 1) (* result x)))))