#LeetCode 717. 1비트 및 2비트 문자
안녕하세요 여러분
새로운 DSA 블로그와 함께 여기 Kunal. 이것은 블로그 라인의 첫 번째 블로그입니다. 여기서 나는 717. 1-bit and 2-bit Characters을 어떻게 해결했는지 설명했습니다. 리트코드 질문입니다.
요구 사항:
2개의 3개의 특수 문자가 있습니다.
000
101010
그리고
111111
주어진 비트 배열에서 마지막 문자가 1비트 문자의 일부인지(즉,
000
).
테스트 + 엣지 케이스:
bits = [1, 0, 0]
, 출력: true
bits = [1, 1, 1, 0]
, 출력: true
bits = [0, 0]
, 출력: true
없다000000
문자 그래서 우리는 선택해야
000
두 번.
해결책:
여기서 비트 배열의 마지막 비트가 1비트 문자의 일부만 될 수 있는지 확인하려고 합니다. 배열에서 2비트 및 1비트 문자를 식별해야 합니다. 요구 사항에 따라
111
언제든지 참석
색인색인색인
배열에서
색인색인색인
그리고
인덱스+1인덱스 + 1인덱스+1
2비트 문자의 일부여야 합니다. 이제 확인할 수 있는 간단한 조건이 생겼습니다.
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
i = 0
while i < len(bits):
# If 1 is present then the next bit should be part of the 2-bit character
# So skip the next bit
if bits[i] == 1:
i += 1
# If at end of the list, 0 is present and not skipped
# Last bit should be a 1-bit character
elif bits[i] == 0 and i == len(bits) - 1:
return True
i += 1
return False
bits[i] == 0
는 bits[i] == 1
의 다른 부분으로 다루어야 하기 때문에 여기서 중복됩니다. 또한 모든 반복에서 검사할 지점i == len(bits) - 1
이 없습니다. 이상적으로는 현재(건너뛰지 않은) 인덱스가 루프 외부 끝에서 비트의 마지막 인덱스를 가리키는지 확인해야 합니다.class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
i = 0
n = len(bits)
last = len(bits) - 1
while i < last:
# If 1 is present then the next bit should be part of the 2-bit character
# So skip the next bit
if bits[i] == 1:
i += 1
i += 1
# If the last index is not skipped then it should be a 1-bit character
return i == last
추가 최적화:
마지막 부분에 집중합시다.
000
그리고 1비트.
000000
그런 다음 마지막 비트는 1비트여야 합니다.
000000
2비트 문자.
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
n = len(bits)
if n == 1:
return True
if bits[-2] == 0:
return True
ones = 0
for i in range(n - 2, -1, -1):
if bits[i] == 1:
ones += 1
else: break
return ones % 2 == 0
위 코드의 첫 번째와 두 번째 조건은 둘 다 짝수인 1의 개수가 0이므로 중복됩니다. 이제 1의 개수가 짝수인지 홀수인지 확인해야 합니다.
class Solution:
def isOneBitCharacter(self, bits: List[int]) -> bool:
evenOnes = True
for bit in bits[-2::-1]:
if bit == 1:
evenOnes = not evenOnes
else: break
return evenOnes
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(#LeetCode 717. 1비트 및 2비트 문자), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rationalkunal/leetcode-717-1-bit-and-2-bit-characters-3n9n텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)