# [用Golang刷LeetCode之 4] 476. Number Complement

miltonsun · · 822 次点击 · · 开始浏览

# 题目描述

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:

1. The given integer is guaranteed to fit within the range of a 32-bit signed integer.
2. You could assume no leading zero bit in the integer's binary representation.

Example 1:

Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.

Example 2:

Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

# 解题思路

1. 找到最小的大于原数字的二进制值仅有一位为1的数；
2. 将此数减1；
3. 与原数字按位求异或。

# Code

Number_Complement.go

``````package _476_Number_Complement

func FindComplement(num int) int {
tmpnum := num
var ret int
for tmpnum > 0 {
ret = ret * 2 + 1
tmpnum = tmpnum >> 1
}

ret = ret ^ num

return ret
}
``````

## Test

Number_Complement_test.go

``````package _476_Number_Complement

import "testing"

func TestFindComplement(t *testing.T) {
ret := FindComplement(5)

if 2 == ret {
t.Logf("pass")
}
}

``````

0 回复

• 请尽量让自己的回复能够对别人有帮助
• 支持 Markdown 格式, **粗体**、~~删除线~~、``单行代码``
• 支持 @ 本站用户；支持表情（输入 : 提示），见 Emoji cheat sheet
• 图片支持拖拽、截图粘贴等方式上传

# 题目描述

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

Note:

1. The given integer is guaranteed to fit within the range of a 32-bit signed integer.
2. You could assume no leading zero bit in the integer's binary representation.

Example 1:

Input: 5
Output: 2
Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.

Example 2:

Input: 1
Output: 0
Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.

# 解题思路

1. 找到最小的大于原数字的二进制值仅有一位为1的数；
2. 将此数减1；
3. 与原数字按位求异或。

# Code

Number_Complement.go

``````package _476_Number_Complement

func FindComplement(num int) int {
tmpnum := num
var ret int
for tmpnum > 0 {
ret = ret * 2 + 1
tmpnum = tmpnum >> 1
}

ret = ret ^ num

return ret
}
``````

## Test

Number_Complement_test.go

``````package _476_Number_Complement

import "testing"

func TestFindComplement(t *testing.T) {
ret := FindComplement(5)

if 2 == ret {
t.Logf("pass")
}
}

``````