LeetCode每日一题|38. 外观数列

214 阅读1分钟

题目描述

题目链接:leetcode-cn.com/problems/co… image.png

思路分析

对这题没用到什么特别的算法,将题目转换成代码描述就可以,对于每一项,从前往后遍历,记录某一个数连续出现的次数,若出现另一个数字,则将当前数字出现的次数和该数加入字符串中遍历完成后用记录的字符串替换掉原本的字符串再继续计算下一项,由于js中charAt在取大于字符串本身长度的字符时会返回''所以不需要特殊考虑超出长度的情况,直接遍历即可。

代码

var countAndSay = function (n) {
  let res = '1';
  while (--n) {
    let tres = '';
    for (let i = 0, sum = 1; i < res.length; i++) {
      if (res.charAt(i) != res.charAt(i + 1)) {
        tres = tres + sum + res.charAt(i);
        sum = 0;
      }
      sum++;
    }
    res = tres;
  }
  return res;
};