All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g1201_1300.s1238_circular_permutation_in_binary_representation.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
package g1201_1300.s1238_circular_permutation_in_binary_representation;

// #Medium #Math #Bit_Manipulation #Backtracking
// #2022_03_12_Time_4_ms_(100.00%)_Space_49.9_MB_(90.59%)

import java.util.ArrayList;
import java.util.List;

/**
 * 1238 - Circular Permutation in Binary Representation\.
 *
 * Medium
 *
 * Given 2 integers `n` and `start`. Your task is return **any** permutation `p` of `(0,1,2.....,2^n -1)` such that :
 *
 * *   `p[0] = start`
 * *   `p[i]` and `p[i+1]` differ by only one bit in their binary representation.
 * *   `p[0]` and `p[2^n -1]` must also differ by only one bit in their binary representation.
 *
 * **Example 1:**
 *
 * **Input:** n = 2, start = 3
 *
 * **Output:** [3,2,0,1]
 *
 * **Explanation:** The binary representation of the permutation is (11,10,00,01). All the adjacent element differ by one bit. Another valid permutation is [3,1,0,2]
 *
 * **Example 2:**
 *
 * **Input:** n = 3, start = 2
 *
 * **Output:** [2,6,7,5,4,0,1,3]
 *
 * **Explanation:** The binary representation of the permutation is (010,110,111,101,100,000,001,011).
 *
 * **Constraints:**
 *
 * *   `1 <= n <= 16`
 * *   `0 <= start < 2 ^ n`
**/
public class Solution {
    public List circularPermutation(int n, int start) {

        List l1 = new ArrayList<>();
        for (int i = 0; i < (1 << n); i++) {
            l1.add(start ^ (i ^ (i >> 1)));
        }
        return l1;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy