Study Plan For Algorithms - Part45

WindMay發表於2024-09-28

1. 格雷編碼
n 位格雷碼序列 是一個由 2n 個整陣列成的序列,其中:

  • 每個整數都在範圍 [0, 2n - 1] 內(含 0 和 2n - 1)
  • 第一個整數是 0
  • 一個整數在序列中出現 不超過一次
  • 每對 相鄰 整數的二進位制表示 恰好一位不同 ,且
  • 第一個 和 最後一個 整數的二進位制表示 恰好一位不同

給定一個整數 n ,返回任一有效的 n 位格雷碼序列 。

class Solution:
    def grayCode(self, n: int) -> List[int]:
        res = [0]
        for i in range(n):
            for j in range(len(res) - 1, -1, -1):
                res.append(res[j] | (1 << i))
        return res

2. 子集 II
給定一個整數陣列 nums ,其中可能包含重複元素,請返回該陣列所有可能的 子集(冪集)。

class Solution:
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res = []
        def backtrack(start, subset):
            res.append(subset[:])
            for i in range(start, len(nums)):
                if i > start and nums[i] == nums[i - 1]:
                    continue
                subset.append(nums[i])
                backtrack(i + 1, subset)
                subset.pop()
        backtrack(0, [])
        return res

相關文章