해밍 거리에 대한 Leetcode 문제 를 해결하고있었습니다. 내 구문과 코드 스타일에 대한 피드백을 좋아할 것입니다. 도전 설명은 다음과 같습니다.

두 정수 사이의 해밍 거리는 해당 비트가 다른 위치의 수입니다.

두 정수 x와 y가 주어지면 해밍 거리를 계산합니다.

참고 : 0 ≤ x, y < 2 31 .

예 :

입력 : x = 1, y = 4

출력 : 2

설명 :

1 (0 0 0 1) 4 (0 1 0 0) ↑ ↑ 

위의 화살표는 해당 비트가 다른
위치를 가리 킵니다.

여기 ” 내 솔루션 :

 def hammingDistance(x: "int", y: "int") -> "int": bin_x = bin(x)[2:] bin_y = bin(y)[2:] len_x = len(bin_x) len_y = len(bin_y) if len_x != len_y: if len_x > len_y: zeros = "0" * (len_x - len_y) bin_y = zeros + bin_y else: zeros = "0" * (len_y - len_x) bin_x = zeros + bin_x dist = 0 for x,y in zip(bin_x, bin_y): if x!=y: dist += 1 return dist 

답변

합리적인 접근 방식이지만 초기에 문자열로 변환 한 다음 문자열에서 모든 작업을 수행하면 많은 추가 코드가 발생합니다. 코드의이 구문 인 if x!=y는 기본적으로 2 비트를 XOR 한 다음 결과가 XOR의 1은 1입니다.

XOR을 정수에 직접 적용하면 문제가 발생합니다. mpler를 사용하면 0으로 채워야하는 모든 문제가 사라지고 (이미 코드 크기의 절반 정도가 됨) 문제는 “이진수로 1을 계산”하는 것으로 축소됩니다. 유사한 루프로도 수행 할 수 있지만 바로 가기가 있습니다.

return bin(x ^ y).count("1") 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다