Files
LeetCode-Go/leetcode/0476.Number-Complement/476. Number Complement.go
2020-08-07 17:06:53 +08:00

20 lines
618 B
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package leetcode
// 解法一
func findComplement(num int) int {
xx := ^0 // ^0 = 1111111111111111111111
for xx&num > 0 {
xx <<= 1 // 构造出来的 xx = 1111111…0000000 的个数就是 num 的长度
}
return ^xx ^ num // xx ^ num结果是前面的 0 全是 1 的num再取反即是答案
}
// 解法二
func findComplement1(num int) int {
temp := 1
for temp <= num {
temp <<= 1 // 构造出来的 temp = 00000……10000末尾 0 的个数是 num 的长度
}
return (temp - 1) ^ num // temp - 1 即是前面都是 0num 长度的末尾都是 1 的数,再异或 num 即是最终结果
}