mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
31 lines
992 B
Java
31 lines
992 B
Java
package com.thealgorithms.bitmanipulation;
|
|
|
|
/**
|
|
* This class provides a method to find the next higher number
|
|
* with the same number of set bits as the given number.
|
|
*
|
|
* @author Hardvan
|
|
*/
|
|
public final class NextHigherSameBitCount {
|
|
private NextHigherSameBitCount() {
|
|
}
|
|
|
|
/**
|
|
* Finds the next higher integer with the same number of set bits.
|
|
* Steps:
|
|
* 1. Find {@code c}, the rightmost set bit of {@code n}.
|
|
* 2. Find {@code r}, the rightmost set bit of {@code n + c}.
|
|
* 3. Swap the bits of {@code r} and {@code n} to the right of {@code c}.
|
|
* 4. Shift the bits of {@code r} and {@code n} to the right of {@code c} to the rightmost.
|
|
* 5. Combine the results of steps 3 and 4.
|
|
*
|
|
* @param n the input number
|
|
* @return the next higher integer with the same set bit count
|
|
*/
|
|
public static int nextHigherSameBitCount(int n) {
|
|
int c = n & -n;
|
|
int r = n + c;
|
|
return (((r ^ n) >> 2) / c) | r;
|
|
}
|
|
}
|