Given an integer n,
return an array ans of length n + 1 such that for each i (0 <= i <= n),
ans[i] is the number of 1's in the binary representation of i.
정수 n이 주어진다, n+1 크기의 배열을 만들어 배열 값으로 해당 index i를 2진수로 표현했을때 1의 갯수를 가지도록 하십시오.
Input: n = 2
Output: [0,1,1]
Explanation:
index 0 은 0 -> 1이 0개,
index 1 는 1 -> 1이 1개,
index 2 는 10 -> 1이 1개.
10진수 | 2진수 |
---|---|
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
class Solution:
def countBits(self, n: int) -> List[int]:
ans = [0 for _ in range(n+1)]
exp = 1
# 0은 무조건 포함하기에 1부터 시작한다.
# 자릿수 값은 n보다는 적어도 같거나 작아야 한다.
while exp <= n:
# 해당 자릿수에 해당하는 값을 구하는것
for i in range(exp, exp * 2):
# n을 넘어서면 종료한다.
if i > n: break
# 값 구하기
ans[i] = 1 + ans[i - exp]
# 자릿수 증가
exp *= 2
return ans