참고 :이 질문은 기본 사이트 (https://leetcode-cn.com/problems/powx-n/)의 50 개 질문과 동일합니다.
문제 해결 아이디어 :
class Solution {
public:
double myPow(double x, int n) {
bool flag = false;
long long N = n;//赋值n
if (N == 0) return 1;//0次方
if (N < 0) flag = true, N = -N;
double ret = 1;
for (int i = 0; i < 32; ++i) {
//由于不超过2的32次方减一,故i少于32
if ((1 << i) & N) ret *= x;//1 << i表示1的二进制左移i位
//(1 << i) & N求N的二进制中的1
x = x * x;
}
if (flag) return 1.0 / ret;//负次方
else return ret;//正数次方
}
};
복잡성 분석 :
시간 복잡도 O (log 2 n) : 이분법의 시간 복잡도는 로그 수준입니다.
공간 복잡도 O (1) : res, b와 같은 변수는 일정한 크기의 추가 공간을 차지합니다.