관리 메뉴

Mini

리트코드 1비트의 갯수 c++ //비트마스킹, 최하위 1지우는법 본문

Algorithm/비트마스킹

리트코드 1비트의 갯수 c++ //비트마스킹, 최하위 1지우는법

Mini_96 2024. 5. 18. 20:14

https://leetcode.com/problems/number-of-1-bits/description/

1. 최하위 1지우는법

n=n&(n-1) 하면 된다.

ex) 11 & 10 == 10으로 최하위 1이 지워진다.

 

2. 1갯수 세는법 

i) n을 2진수로 바꾸는 로직을 이용하면 된다.

ii) 최하위 1을 계속 지우고 cnt++ 하면된다. n이 1이상인동안

 

3. 전체코드

i)

class Solution {
public:
    int hammingWeight(int n) {
        //cout<<(1<<31);
        int ret=0;
        while(n){
            ret+=(n%2);
            n/=2;
        }
        return ret;
    }
};

ii)

class Solution {
public:
    int hammingWeight(int n) {
        int cnt=0;
        while(n){
            n=n&(n-1);
            cnt++;
        }
        return cnt;
    }
};