Đề bài:
Viết hàm pow(x, n) để tính giá trị của x mũ n (tức là x^n).
Ví dụ 1:
Input: x = 2.00000, n = 10 Output: 1024.00000
Ví dụ 2:
Input: x = 2.10000, n = 3 Output: 9.26100
Ví dụ 3:
Input: x = 2.00000, n = -2 Output: 0.25000 Explanation: 2^-2 = 1/2^2 = 1/4 = 0.25
Ràng buộc:
- -100.0 < x < 100.0
- -2^31 <= n <= 2^31-1
- n là một số nguyên.
- Hoặc x khác không hoặc n > 0.
- -10^4 <= x^n <= 10^4
Giải thích thuật toán bằng C ++
class Solution {
public:
double myPow(double x, long n) {
if (n == 0)
return 1;
if (n < 0)
return 1 / myPow(x, -n);
if (n & 1)
return x * myPow(x, n - 1);
return myPow(x * x, n / 2);
}
};
Đây là một giải thuật để tính giá trị của x mũ n (x^n) trong hàm `myPow`. Dưới đây là giải thích chi tiết về giải thuật:
1. Kiểm tra nếu n bằng 0, trả về 1. Điều này là do bất kỳ số nào mũ 0 đều bằng 1.
2. Kiểm tra nếu n âm, trả về kết quả của phép tính 1 chia cho myPow(x, -n). Điều này là do x mũ -n tương đương với 1 chia cho x^n.
3. Kiểm tra nếu n là số lẻ (n & 1 trả về true), trả về kết quả của phép tính x nhân với myPow(x, n – 1). Điều này tương đương với việc tính x^n bằng cách nhân x^(n-1) với x.
4. Trong trường hợp n là số chẵn, trả về kết quả của phép tính myPow(x * x, n / 2). Điều này tương đương với việc tính x^n bằng cách tính bình phương của x và nhân với x^(n/2).
Giải thuật sử dụng đệ quy để tính toán giá trị của x mũ n, tận dụng tính chất của luỹ thừa chẵn/lẻ để giảm số lần tính toán. Kết quả được trả về là giá trị của x^n.
Giải thích thuật toán bằng Java
class Solution {
public double myPow(double x, long n) {
if (n == 0)
return 1;
if (n < 0)
return 1 / myPow(x, -n);
if (n % 2 == 1)
return x * myPow(x, n - 1);
return myPow(x * x, n / 2);
}
}
Giải thích thuật toán bằng Python
class Solution:
def myPow(self, x: float, n: int) -> float:
if n == 0:
return 1
if n < 0:
return 1 / self.myPow(x, -n)
if n & 1:
return x * self.myPow(x, n - 1)
return self.myPow(x * x, n // 2)
0 / 5 - (0 Đánh Giá)
