Chúng tôi được yêu cầu viết một hàm JavaScript ở dạng số nguyên dương, chẳng hạn như n. Hàm sẽ tìm và trả về khoảng cách dài nhất giữa hai số 1 liền kề bất kỳ trong biểu diễn nhị phân của n.
Nếu không có hai số 1 liền kề, thì chúng ta phải trả về 0.
Hai số 1 liền kề nếu chỉ có số 0 ngăn cách chúng (có thể không có số 0). Khoảng cách giữa hai số 1 là sự khác biệt tuyệt đối giữa các vị trí bit của chúng. Ví dụ:hai số 1 trong "1001" có khoảng cách là 3.
Ví dụ -
Nếu đầu vào là 22, thì đầu ra phải là 2,
bởi vì,
- Mã nhị phân cho 22 là 10110
- Cặp số 1 liền kề đầu tiên là "10110" với khoảng cách là 2.
- Cặp số 1 liền kề thứ hai là "10110" với khoảng cách là 1.
- Câu trả lời là khoảng cách lớn nhất trong hai khoảng cách này, là 2.
Lưu ý rằng "10110" không phải là một cặp hợp lệ vì có một số 1 ngăn cách hai số 1 được gạch chân.
Ví dụ
const num = 22; const binaryGap = (num = 1) => { let last = -1; let ans = 0; // go through every bit for (let i = 0; i < 32; i++) { // check whether the bit is `1`. // if true, calculate the longest distance with // previous `1` if `1` was previously found. if ((num >> i) & 1 > 0) { if (last >= 0) { ans = Math.max(ans, i - last); } last = i; } } return ans; }; console.log(binaryGap(num));
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
2