配对交换Java版(力扣)

简介: 配对交换Java版(力扣)

配对交换


配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。


示例1:

输入:num = 2(或者0b10)

输出 1 (或者 0b01)


示例2:

输入:num = 3

输出:3


提示:

num的范围在[0, 2^30 - 1]之间,不会发生整数溢出。


题意:就是将一个数的二进制数的奇数位和偶数位交换,也就是相当于将奇数位左移,偶数位右移。


思路:我们可以分别取出这个数的奇数位和偶数位,然后将奇数位左移,偶数位右移,然后再将移动后的奇数位和偶数位进行或运算即可得到结果。


代码:


class Solution {
    public int exchangeBits(int num) {
        // 奇数
        int odd = num & 0x55555555; // 0x55555555 = 0b0101_0101_0101_0101_0101_0101_0101_0101
        //偶数
        int even = num & 0xaaaaaaaa; // 0xaaaaaaaa = 0b1010_1010_1010_1010_1010_1010_1010_1010
        odd <<= 1;
        even >>=1;
        return odd | even;
    }
}

完整代码(含测试样例):


package com.Keafmd.day0106;
/**
 * Keafmd
 *
 * @ClassName: Exchange
 * @Description: 配对交换 https://leetcode-cn.com/problems/exchange-lcci/
 * @author: 牛哄哄的柯南
 * @date: 2021-01-06 19:21
 */
public class Exchange {
    public static void main(String[] args) {
        Solution solution = new Solution();
        int num = 1;
        num = solution.exchangeBits(num);
        System.out.println(num);
    }
}
class Solution {
    public int exchangeBits(int num) {
        // 奇数
        int odd = num & 0x55555555; // 0x55555555 = 0b0101_0101_0101_0101_0101_0101_0101_0101
        //偶数
        int even = num & 0xaaaaaaaa; // 0xaaaaaaaa = 0b1010_1010_1010_1010_1010_1010_1010_1010
        odd <<= 1;
        even >>=1;
        return odd | even;
    }
}

输出结果:


2
Process finished with exit code 0


相关文章
|
7月前
|
Java
383. 赎金信 --力扣 --JAVA
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能c里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。
45 1
|
7月前
|
Java
1276. 不浪费原料的汉堡制作方案 --力扣 --JAVA
圣诞活动预热开始啦,汉堡店推出了全新的汉堡套餐。为了避免浪费原料,请你帮他们制定合适的制作计划。 给你两个整数 tomatoSlices 和 cheeseSlices,分别表示番茄片和奶酪片的数目。不同汉堡的原料搭配如下: 巨无霸汉堡:4 片番茄和 1 片奶酪 小皇堡:2 片番茄和 1 片奶酪 请你以 [total_jumbo, total_small]([巨无霸汉堡总数,小皇堡总数])的格式返回恰当的制作方案,使得剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlices 的数量都是 0。 如果无法使剩下的番茄片 tomatoSlices 和奶酪片 cheeseSlic
54 0
|
28天前
|
存储 Java API
Java交换map的key和value值
通过本文介绍的几种方法,可以在Java中实现Map键值对的交换。每种方法都有其优缺点,具体选择哪种方法应根据实际需求和场景决定。对于简单的键值对交换,可以使用简单遍历法或Java 8的Stream API;对于需要处理值不唯一的情况,可以使用集合存储或Guava的Multimap。希望本文对您理解和实现Java中的Map键值对交换有所帮助。
30 1
|
6月前
|
存储 Java API
探讨Java中交换Map的Key和Value值的技术
探讨Java中交换Map的Key和Value值的技术
49 2
|
6月前
|
存储 缓存 Java
Java交换map的key和value值
在Java中,直接交换`Map`的key和value是不允许的,因为key是唯一的且不可变。不过,可以通过创建新`Map`实现交换:将原`Map`的value作为新key,key作为新value。注意,如果原`Map`有重复value或null,需额外处理。以下是一个代码示例,展示了如何在value唯一且非null的情况下交换`Map`的key和value。对于重复value或null值的情况,可以使用`List`存储多个key或忽略null值。在实际应用中,`Map`常用于缓存、配置管理、数据库结果映射等多种场景。
71 1
|
6月前
|
搜索推荐 算法 Java
JAVA中的交换类排序算法详解
JAVA中的交换类排序算法详解
51 1
|
6月前
|
Java
java交换两个数字三种方法
java交换两个数字三种方法
583 0
|
6月前
|
Java
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
P9242 [蓝桥杯 2023 省 B] 接龙数列JAVA,边权为1的最短路问题,洛谷P9242 [蓝桥杯 2023 省 B] 接龙数列​编辑力扣1926.迷宫离入口最近的出口力扣433.
|
7月前
|
存储 Java
JAVA数据结构刷题 -- 力扣二叉树
JAVA数据结构刷题 -- 力扣二叉树
57 0
|
7月前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
106 0