https://leetcode.com/problems/counting-bits/description/
1. 비트 구현 풀이
1. 각각 숫자에대해
2진수를 구하면서 1의 갯수를 계산한다.
O(n lgn)
class Solution {
public:
vector<int> countBits(int n) {
vector<int> ret;
for(int i=0;i<=n;++i){
int cnt=0;
int num=i;
while(num){
if(num%2==1) cnt++;
num/=2;
}
ret.push_back(cnt);
}
return ret;
}
};
2. dp풀이
*행동영역 : n이 홀짝일때를 나눠서 규칙을 발견해라!
n==0인 기저사례 처리 주의.
class Solution {
public:
vector<int> countBits(int n) {
vector<int> dp(n+1,0);
if(n==0) return dp;
dp[0]=0;
dp[1]=1;
for(int i=2;i<=n;++i){
if(i%2==0){
dp[i]=dp[i/2];
}
else{
dp[i]=dp[i/2]+1;
}
}
return dp;
}
};
'Algorithm > dp' 카테고리의 다른 글
[알고리즘] 리트코드 최대하위배열 c++ // dp (0) | 2024.07.01 |
---|---|
[알고리즘] 리트코드 고유경로 c++ // dp 모든유형 (0) | 2024.07.01 |
리트코드 322 코인변경 c++ // 동전dp복습, 리트코드 초기화주의 (0) | 2024.05.19 |
리트코드 주식을사고파는가장좋은시기 c++ // 이분탐색(슬라이딩윈도)+그리디, dp (0) | 2024.05.18 |
백준 1932 정수삼각형 c++ // 재귀dp, 1,2,3,4..n 개 입력받는법 (0) | 2024.05.08 |