Vấn đề
Chúng tôi được yêu cầu viết một hàm JavaScript sử dụng một Số nguyên duy nhất, num, làm đối số đầu tiên và duy nhất. Hàm của chúng ta phải chuẩn bị một mảng cho mọi số từ 0 đến num (bao gồm cả hai số đó), đối với mỗi số, phần tử tương ứng phải là số 1 có trong biểu diễn nhị phân của số đó.
Ví dụ:nếu đầu vào của hàm là -
const num = 4;
Sau đó, kết quả đầu ra phải là -
const output = [0, 1, 1, 2, 1];
Giải thích đầu ra:
Bởi vì 0 chứa 0 1 ở dạng nhị phân của nó 1 chứa 1, v.v.
Ví dụ
Mã cho điều này sẽ là -
const num = 4; const mapBinary = (num = 0) => { if (num === 0){ return [0]; }; const res = [0]; for (let i = 1; i <= num; i++) { const n = i % 2 === 0 ? res[i/2] : res[Math.floor(i/2)] + 1; res.push(n); }; return res; };
Giải thích mã:
Trong khi tính toán các bit, chúng tôi có thể lưu ý một số điều để làm cho mọi thứ trở nên dễ dàng hơn.
-
numberOfBits (n) ===numberOfBits (2 * n), kết quả thứ hai nhận thêm một bit 0 so với kết quả đầu tiên.
-
nếu n là số chẵn, bit cuối cùng của n sẽ là 0.
-
nếu n là một số lẻ, việc tính toán kết quả có thể được coi là thay thế bitof cuối cùng (n-1) / 2 bằng 1, vì vậy chúng ta nhận được phương trình numberOfBits (n) ===numberOfBits (Math.floor (n / 2)) + 1.
Đầu ra
Và đầu ra trong bảng điều khiển sẽ là -
[ 0, 1, 1, 2, 1 ]