作者HccrtZ (赫茲/1.048596)
看板Marginalman
標題Re: [閒聊] 每日LeetCode
時間Thu Nov 30 10:19:06 2023
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
推 a9486l: 大師 11/30 10:19
→ nothink00: 大師 11/30 10:25
推 sustainer123: 大師 11/30 10:28
推 kerycheng: 你怎麼也開始每日leetcode了 11/30 10:30
→ HccrtZ: 上班沒事就會寫啊 今天的比較有趣紀錄一下 11/30 10:31
推 wwndbk: 大師 11/30 10:32
推 ken890126: 大師 11/30 10:39
→ ZooseWu: 怎麼又一個JAVA解題 你版剩我不會JAVA了嗎 11/30 11:22