作者:
HccrtZ (Violet)
2023-11-30 10:19:0611/30
第i個bit要從1變成0的操作數為OPi
OPi = 1 + 2*OP(i-1)
把1000000變成0000000的過程中
路徑上的任一個bit n 若為1
就可以節省OPn
例:10001000 = OP8-OP4
但如果再多一個bit m為1
就要多費功把他變回0
例:10001001 = OP8-OP4+OP1
所以就一直加減加減OPi
最後取絕對值
class Solution {
public:
int minimumOneBitOperations(int n) {
int ope = 1;
int base = 1;
int ans = 0;
while(n != 0){
if(n%2 == 1){
ans += ope*base;
ope *= -1;
}
base = 1 + base*2;
n /= 2;
}
return abs(ans);
}
};
其實本來想不太到,列出來幾個才看出規律
感覺像考數字不是考程式2ㄏ