숫자 n이 있다고 가정하고 해당 숫자에 대한 그레이 코드(즉, n번째 그레이 코드)를 찾아야 합니다. 우리가 알고 있듯이 그레이 코드는 각 연속 숫자의 값이 정확히 1비트씩 다르도록 이진수를 정렬하는 방법입니다. 일부 그레이 코드는 다음과 같습니다. [0, 1, 11, 10, 110, 111 등]
따라서 입력이 n =12와 같으면 12가 이진법으로 (1100)이므로 출력은 10이 되며 해당 회색 코드는 (1010)이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
- solve() 함수를 정의합니다. n 소요됩니다.
- n이 0과 같으면
- 0을 반환
- x :=1
- 동안 x * 2 <=n, do
- x :=x * 2
- return x + solve(2 * x - n - 1)
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
class Solution: def solve(self, n): if n == 0: return 0 x = 1 while x * 2 <= n: x *= 2 return x + self.solve(2 * x - n - 1) ob = Solution() n = 12 print(ob.solve(n))
입력
12
출력
10