王廷瑋|數位醫療|智慧醫療: 89. Gray Code WFU

2024年7月5日 星期五

89. Gray Code

89. Gray Code


n 位的格雷碼序列是一個長度為 2^n 的整數序列,其中:

每個整數都在 [0, 2^n - 1] 的範圍內, 第一個整數是 0, 每個整數在序列中不超過一次, 每對相鄰整數的二進制表示形式僅差一位,並且 第一個和最後一個整數的二進制表示形式僅差一位。 給定一個整數 n,返回任意有效的 n 位格雷碼序列。

範例 1:

輸入:n = 2 輸出:[0,1,3,2] 解釋: [0,1,3,2] 的二進制表示形式是 [00,01,11,10]。00 和 01 只差一位
01 和 11 只差一位
11 和 10 只差一位
10 和 00 只差一位 [0,2,3,1] 也是一個有效的格雷碼序列,其二進制表示形式是 [00,10,11,01]。
00 和 10 只差一位
10 和 11 只差一位
11 和 01 只差一位
01 和 00 只差一位


Python


from typing import List

class Solution:
def grayCode(self, n: int) -> List[int]:
result = [0]
for i in range(n):
# Reflect the existing sequence
reflected = [x | (1 << i) for x in reversed(result)]
# Append the reflected sequence to the original
result.extend(reflected)
return result

23.67MB, 70ms


C++


#include <vector>
using namespace std;

class Solution {
public:
vector<int> grayCode(int n) {
vector<int> result = {0};
for (int i = 0; i < n; ++i) {
int currentSize = result.size();
for (int j = currentSize - 1; j >= 0; --j) {
result.push_back(result[j] | (1 << i));
}
}
return result;
}
};

13.01MB, 9ms


Javascript


/**
* @param {number} n
* @return {number[]}
*/
var grayCode = function(n) {
let result = [0];
for (let i = 0; i < n; i++) {
const currentSize = result.length;
for (let j = currentSize - 1; j >= 0; j--) {
result.push(result[j] | (1 << i));
}
}
return result;
};

60.51MB, 84ms