Re: [閒聊] 每日LeetCode已回收
11/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ㄏ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.140.131.92 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1701310748.A.BD3.html
推
11/30 10:19,
2年前
, 1F
11/30 10:19, 1F
→
11/30 10:25,
2年前
, 2F
11/30 10:25, 2F
推
11/30 10:28,
2年前
, 3F
11/30 10:28, 3F
推
11/30 10:30,
2年前
, 4F
11/30 10:30, 4F
→
11/30 10:31,
2年前
, 5F
11/30 10:31, 5F
推
11/30 10:32,
2年前
, 6F
11/30 10:32, 6F
推
11/30 10:39,
2年前
, 7F
11/30 10:39, 7F
→
11/30 11:22,
2年前
, 8F
11/30 11:22, 8F
討論串 (同標題文章)
完整討論串 (本文為第 558 之 719 篇):