面试:X的N次方四种解法
四种解法(JAVA)
解法1
最容易想到的方法。时间复杂度O(n)。
public int Solution1(int x,int n){
int result = 1;
for (int i = 0; i < n; i++) {
result = result * x;
}
return result;
}
解法2
简单递归。时间复杂度O(n)。
public int Solution2(int x,int n){
if (n == 0) return 1;
return Solution2(x,n-1)*x;
}
解法3
递归。时间复杂度O(n)。
public int Solution3(int x,int n){
if (n == 0) return 1;
if (n % 2 == 1) return Solution3(x,n/2) * Solution3(x,n/2) * x;
return Solution3(x,n/2) * Solution3(x,n/2);
}
解法4
递归。时间复杂度O(logn)。
public int Solution4(int x,int n){
if (n == 0) return 1;
int t = Solution4(x,n/2);
if (n % 2 == 1) return t * t * x;
return t * t;
}
可运行程序
public class xn {
class Solution{
public int Solution1(int x,int n){
int result = 1;
for (int i = 0; i < n; i++) {
result = result * x;
}
return result;
}
public int Solution2(int x,int n){
if (n == 0) return 1;
return Solution2(x,n-1)*x;
}
public int Solution3(int x,int n){
if (n == 0) return 1;
if (n % 2 == 1) return Solution3(x,n/2) * Solution3(x,n/2) * x;
return Solution3(x,n/2) * Solution3(x,n/2);
}
public int Solution4(int x,int n){
if (n == 0) return 1;
int t = Solution4(x,n/2);
if (n % 2 == 1) return t * t * x;
return t * t;
}
}
public static void main(String[] args) {
xn xn1 = new xn();
Solution s = xn1.new Solution();
System.out.println(s.Solution1(5,3));
System.out.println(s.Solution2(5,3));
System.out.println(s.Solution3(5,3));
System.out.println(s.Solution4(5,3));
}
}
借鉴自公众号-----代码随想录
代码随想录求X的n次方法链接