力扣38.外观数列 js实现详解

双指针查找字符串相同元素

力扣38.外观数列 js实现详解_第1张图片

这道题就是按照题意里面的思路来写就好啦,两个点,一个是循环,一个是找相同数字

1.循环,让我们捋一捋有几层循环?

1)最外层,n=4,那就是求第4层,要循环4次

2)循环遍历字符串

3)循环去找数字相同的

2.怎么找相同数字?

双指针,定义start=0和end=0

if(target[start]===target[end])

满足这个条件代,end++;往后挪一个继续判断,直到不相等,令strat=end,左指针向前移(3循环结束,继续2循环)

 function countAndSay(n) {
  //字符串根据不同元素进行分组
  var targetNum="1";
  //为什么从2开始?因为n等于4,其实是操作3次,初始第一次是"1"
  for(var i=2;i<=n;i++){
    var start = 0;
    var end = 0;
    var arr =[];
    //右指针小于字符串长度
    while(end

这道题的解决方法很好想,题目里已经告诉了,要记住一个点是怎么找相同元素(双指针实现),反思一下我之前的思路,

function countAndSay(n) {
  //字符串根据不同元素进行分组
  var targetNum = '1';
  var start = 2;
  var arr = [];
  while (n > 0) {
    for (var i = start; i <= targetNum.length - 1; i++) {
        //这里有问题,不能把当前和下一个作为判断条件,
      while (targetNum[i] === targetNum[i + 1]) {
        var target = targetNum.slice(start, i);
        console.log(target);
        arr.push(target);
        start = i + 1;
      }
    }
    var list = [];
    //冗余
    for (var j = 0; j <= arr.length - 1; j++) {
      list.push(arr[j].length);
      list.push(arr[j][0]);
    }
    targetNum = list.join('');
    n--;
  }
}

 

你可能感兴趣的:(算法合集,算法,leetcode,javascript)