美文网首页
LeetCode之Circular Permutation in

LeetCode之Circular Permutation in

作者: 糕冷羊 | 来源:发表于2020-03-10 22:56 被阅读0次

问题:



方法:
这题可以通过循环码生成去做,但是需要了解循环码生成理论。本解法没有使用其他多余知识,只是利用染色法记录是否经过,然后通过位操作异或去改变某一位并加入list,且跳过已经添加的元素,最后输出list即可。

class CircularPermutationInBinaryRepresentation {
    fun circularPermutation(n: Int, start: Int): List<Int> {
        val vis = BooleanArray((1).shl(n)) { // 2^n
            false
        }
        val ans = mutableListOf<Int>()
        ans.add(start)
        vis[start] = true
        var cur = start
        for (i in 0 until (1).shl(n)) { // 2^n
            for (j in 0 until n) {
                val t = cur.xor((1).shl(j))
                if (!vis[t]) {
                    cur = t
                    vis[t] = true
                    ans.add(cur)
                    break
                }
            }
        }
        return ans
    }
}

fun main(args: Array<String>) {
    val circularPermutationInBinaryRepresentation = CircularPermutationInBinaryRepresentation()
    CommonUtils.printArray(circularPermutationInBinaryRepresentation.circularPermutation(3, 2).toTypedArray())
}

有问题随时沟通

具体代码实现可以参考Github

相关文章

网友评论

      本文标题:LeetCode之Circular Permutation in

      本文链接:https://www.haomeiwen.com/subject/siandhtx.html