Data Structures & Algorithms

Bit

~3 mins read

1
2
3
4
5
6
7
8
9
10
11
12
13
// Get 
num & 1<<i 

// Set 
num | 1<<i

// Clear 
num & ~(1<<i)

// masks
(1<<i)-1 // 0100 - 0001 = 0011 

-1 << (i+1) // 1111 << 2 = 1100 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func reverseBits(num uint32) uint32 {
    /*
    Reverse bits of a given 32 bits unsigned integer.

    Input: 00000010100101000001111010011100
    Output: 00111001011110000010100101000000
    */
    res := uint32(0)
    power := uint32(31)
    for num != 0 {
        res += (num & 1) << power
        num = num >> 1
        power -= 1
    }
    return res
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def readBinaryWatch(num: int) -> List[str]:    
    """
    Given a non-negative integer n 
    which represents the number of LEDs that are currently on, 
    return all possible times a binary watch could represent.
    
    Example:
    Input: n = 1
    Return: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]
    """

    res = []
    for h in range(12):
        for m in range(60):
            if (bin(h) + bin(m)).count('1') == num:
                time = '%d:%02d' % (h, m)
    return res

🎰