Chúng ta cần viết hàm JavaScript nhận vào số nguyên dương n. Hàm tìm và trả về khoảng cách dài nhất giữa hai bit 1 liền kề trong biểu diễn nhị phân của n.
Nếu không có hai bit 1 liền kề, trả về 0.
Hai bit 1 là liền kề nếu chỉ có bit 0 ngăn cách (có thể không có bit 0). Khoảng cách là hiệu tuyệt đối giữa vị trí bit của chúng. Ví dụ, hai bit 1 trong "1001" có khoảng cách 3.
Ví dụ: Nếu đầu vào là 22, kết quả là 2,
vì:
- Mã nhị phân của 22 là 10110
- Cặp 1 liền kề đầu tiên "10110" khoảng cách 2.
- Cặp thứ hai "10110" khoảng cách 1.
- Kết quả là lớn nhất của hai khoảng cách, là 2.
Lưu ý "10110" không phải cặp hợp lệ vì có bit 1 ngăn giữa hai bit 1 được gạch dưới.
Ví dụ
const num = 22;
const binaryGap = (num = 1) => {
let last = -1;
let ans = 0;
for (let i = 0; i < 32; i++) {
if ((num >> i) & 1 > 0) {
if (last >= 0) {
ans = Math.max(ans, i - last);
}
last = i;
}
}
return ans;
};
console.log(binaryGap(num));Kết quả
Kết quả in ra console:
2