楼主:
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ㄏ