Difficulty: **配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。 示例1: 输入:num = 2(或者0b10) 输出 1 (或者 0b01) 示例2: 输入:num = 3 输出:3 提示: num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。 **
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
示例1:
1
2
|
输入:num = 2(或者0b10)
输出 1 (或者 0b01)
|
示例2:
提示:
num
的范围在[0, 2^30 - 1]之间,不会发生整数溢出。
Solution
Language: ****
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
func exchangeBits(num int) int {
return handle(num)
}
func reverse(arr []int) {
i := 0
j := len(arr) - 1
for i < j {
arr[i], arr[j] = arr[j], arr[i]
i++
j--
}
}
func handle(num int) int {
var v []int
for num != 0 {
v = append(v, (num % 2))
num /= 2
}
reverse(v)
if len(v)%2 != 0 {
reverse(v)
v = append(v, 0)
reverse(v)
}
// fmt.Println(v)
//reverse(v)
for i := 0; i < len(v)-1 ; i += 2 {
v[i], v[i+1] = v[i+1], v[i]
}
//reverse(v)
// fmt.Println(v)
// 二进制转十进制
var res = 0
for i := 0; i < len(v); i++ {
res = res*2 + v[i]
}
return res
}
|