nums라는 숫자 목록과 또 다른 값 k가 있다고 가정합니다. 다음 작업을 k번 수행해야 합니다. 목록에서 아무 숫자나 선택합니다. 해당 숫자의 이진 표현에서 0인 비트를 선택하고 1로 만듭니다. 마지막으로 k 연산을 수행한 후 모든 숫자의 가능한 최소 합계를 반환해야 합니다. 답변이 너무 높으면 결과 모드 10^9+7을 반환합니다.
따라서 입력이 nums =[4, 7, 3] k =2와 같으면 4의 이진 표현은 100, 3은 011, 7은 111이므로 출력은 17이 됩니다. 2비트, 4의 비트를 설정하여 111(7)로 만들 수 있습니다. 그러면 총합은 7 + 7 + 3 =17입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다.
-
답변 :=0, 나는 :=0
-
k가 0이 아닌 동안 수행
-
숫자의 각 n에 대해 수행
-
(n / 2^i)가 짝수이면
-
ans :=ans + 2^i
-
k :=k - 1
-
k가 0과 같으면
-
루프에서 나오다
-
-
-
-
나는 :=나는 + 1
-
-
return (ans + nums의 모든 요소의 합) mod m
더 나은 이해를 위해 다음 구현을 살펴보겠습니다.
예시
class Solution: def solve(self, nums, k): m = (10 ** 9 + 7) ans = 0 i = 0 while k: for n in nums: if (n >> i) & 1 == 0: ans += 1 << i k -= 1 if k == 0: break i += 1 return (ans + sum(nums)) % m ob = Solution() nums = [4, 7, 3] k = 2 print(ob.solve(nums, k))
입력
[4, 7, 3], 2
출력
17