Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tạo dãy n số look-and-say đầu tiên bằng JavaScript


Vấn đề

Trong toán học, dãy look-and-say là dãy 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 ta đọc các chữ số của thành viên trước, đếm số chữ số trong các nhóm cùng chữ số.

Ví dụ, số tiếp theo của 1211 là:

111221

Vì nếu chúng ta đọc chữ số của 1211 to sẽ là:

Một 1, một 2, hai 1 cho ta 111221

Chúng ta cần viết một hàm JavaScript nhận vào một số n và trả về n số hạng đầu của dãy look-and-say.

Ví dụ

Dưới đâ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));

Kết quả

Kết quả console:

[ 
  '1', 
  '11', 
  '21', 
  '1211', 
  '111221', 
  '312211', 
  '13112221', 
  '1113213211', 
  '31131211131221', 
  '13211311123113112211', 
  '11131221133112132113212221', 
  '3113112221232112111312211312113211' ]