Vấn đề
Trong toán học, chuỗi nhìn và nói là chuỗi các số nguyên bắt đầu như sau -
1, 11, 21, 1211, 111221, 312211, …
Để tạo một thành viên của dãy từ thành viên trước đó, chúng tôi đọc bớt các chữ số của thành viên trước đó, đếm số chữ số trong các nhóm có cùng một chữ số.
Ví dụ:số tiếp theo của 1211 là -
111221
Bởi vì nếu chúng ta đọc chữ số 1211 to hơn thì nó sẽ -
One one, one two, two one which gives us 111221
Chúng tôi được yêu cầu viết một hàm JavaScript nhận vào một số n và trả về n số hạng đầu tiên của chuỗi giao diện nhìn và nói.
Ví dụ
Sau đây là mã -
const num = 12; const generateSequence = (num = 1) => { const lookAndSay = (val) => { let res = ''; let chars = (val + ' ').split(''); let last = chars[0]; let count = 0; chars.forEach(c => { if(c === last){ count++; }else{ res += (count + '') + last; last = c; count = 1; }; }); return res; } let start = 1; const res = []; for(let i = 0; i < num; i++){ res.push(String(start)); start = lookAndSay(start); }; return res; }; console.log(generateSequence(num));
Đầu ra
Sau đây là đầu ra của bảng điều khiển -
[ '1', '11', '21', '1211', '111221', '312211', '13112221', '1113213211', '31131211131221', '13211311123113112211', '11131221133112132113212221', '3113112221232112111312211312113211' ]