We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
原题链接: https://leetcode.cn/problems/circular-permutation-in-binary-representation/
前置条件:
p[i]
p[i+1]
p[0]
p[2^n -1]
start
0
0 ^ start = start
解法一:两次循环:
/** * @param {number} n * @param {number} start * @return {number[]} */ var circularPermutation = function (n, start) { /* * 第一步,先求格雷编码 */ let result = [0] // 存储结果,第一个整数为0 // 一共计算n位格雷码序列,需要循环n次 for (let i = 0; i < n; i++) { // 每次计算时,已有的序列不变 // 只需要计算已有序列的逆序列,每个再加前缀1 // 需要缓存已有序列的长度,用于计算下一段序列 const len = result.length // 由于是逆序计算,因此要从len - 1开始加前缀 for (let j = len - 1; j >= 0; j--) { // 加前缀1后,把新值存入结果 result.push(result[j] | (1 << i)) } } /* * 第二步,将格雷编码的每一项都按位异或start */ for (let i = 0; i < result.length; i++) { result[i] ^= start } return result }
解法二:
result
1
/** * @param {number} n * @param {number} start * @return {number[]} */ var circularPermutation = function (n, start) { let result = [start] // // 存储结果,第一个整数为start // 一共计算n位编码,需要循环n次 for (let i = 0; i < n; i++) { // 每次计算时,已有的序列不变 // 只需要计算已有序列的逆序列,每个再加前缀1 // 需要缓存已有序列的长度,用于计算下一段序列 const len = result.length // 由于是逆序计算,因此要从len - 1开始加前缀 for (let j = len - 1; j >= 0; j--) { // 加前缀1后,把新值存入结果 result.push( // 将编码异或start,转为格雷编码 ((result[j] ^ start) | // 为格雷编码加上前缀1 (1 << i)) ^ // 将格雷编码异或start,转为以start开头的编码 start ) } } return result }
The text was updated successfully, but these errors were encountered:
No branches or pull requests
原题链接:
https://leetcode.cn/problems/circular-permutation-in-binary-representation/
前置条件:
p[i]
和p[i+1]
的二进制表示形式只有一位不同”,以及“p[0]
和p[2^n -1]
的二进制表示形式也只有一位不同”start
开头的一串编码即可0
,可以得知0 ^ start = start
p[i]
和p[i+1]
的相互关系,以及p[0]
和p[2^n -1]
的相互关系不会改变a | b | a XOR b
---|---|---------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
解法一:两次循环:
start
,即可求得结果解法二:
result
中的元素时,将其异或start
,将其转为格雷编码1
result
时,将其异或start
,转为以start
开头的编码The text was updated successfully, but these errors were encountered: