38. 报数(JavaScript版)

报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221

1 被读作  "one 1"  ("一个一") , 即 11
11 被读作 "two 1s" ("两个一"), 即 21
21 被读作 "one 2",  "one 1" ("一个二" ,  "一个一") , 即 1211

给定一个正整数 n ,输出报数序列的第 n 项。

注意:整数顺序将表示为一个字符串。

示例 1:

输入: 1
输出: "1"

示例 2:

输入: 4
输出: "1211"

思路:

首先这个题目读了好几遍。要得到第n项,把第n-1项读出来就可以了,所以是一个循环,每一次循环计算出一项。

在循环内部,我们需要把当前这一项郎读出来,得到的结果作为下一循环的开始;设置一个计数器count;一个指针 j 从1开始,第 j 个数和第 j - 1 个数相等,count++, 不相等,就可以朗读这个第 j - 1 个数。

JavaScript 版本:

/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
  if ( n === 1 ) {
    return '1';
  }
  var intstr = '11';
  var count = 1;
  var s_temp = '';
  for ( var i = 2; i < n; i ++ ) {
    for ( var j = 1; j < intstr.length; j ++ ) {
      if (intstr[j] === intstr[j - 1]) {
        count ++;
      } else {
        s_temp = s_temp + count + intstr[j - 1];
        count = 1;
      }
      if (j === intstr.length - 1) {
        s_temp = s_temp + count + intstr[j];
      }
    }
    count = 1;
    intstr = s_temp;
    s_temp = ''; 
  }
  return intstr;
}

猜你喜欢

转载自blog.csdn.net/romeo12334/article/details/81151864