LeetCode443-压缩字符串(双索引)

Posted 朋友圈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode443-压缩字符串(双索引)相关的知识,希望对你有一定的参考价值。

因为js是不区分整形和double的,所以会有0.2....

 

 

Number.isInteger

 

对1取余

记得就好了,小数对1取余是它自己

但是其实除1也是她自己

 

因为没法去掉末位,所以和java会有不同的效果,很烦

 最后使用向下取整!

 

 

如果只需要返回值的话,这样就好了

看错题目了,没想到他还要在原来数组修改的

var compress = function(chars) {
    if(chars.length<=1)
        return chars.length;
    
    //记录当前字符
    var current = chars[0];
    //记录返回长度
    var result = 0;
    //记录当前字符的个数
    var count = 1;

    

    for(let i=1,len = chars.length;i<len;i++){
        let temp = chars[i];
        
        //遇到一个和之前不一样的字符了,结束计算
        if(temp!=current){
            //这个字符算一个位置
            result++;
            
            //大于1才计算
            if(count>1){
                while(count>0){
                    result++;
                    count = Math.floor(count/10);
                }
            }
            
            //current变成下一个
            current = temp;
            count = 1;
            
        }else{
            count++;
        }

    }

    //最后如果全是重复的,直接跳出了,可能没有计算到
    
      result++;
            
      //大于1才计算
      if(count>1){
      while(count>0){
          result++;
          count = Math.floor(count/10);
        }
      }

 


    return result;
};

 

 用一个变量,记录可以插的位置即可。

不可能覆盖的。

因为只会在重复的数字位置进行插入数字。

该遍历的继续遍历

var compress = function(chars) {
        if(chars.length<=1)
        return chars.length;
    
    //记录当前字符
    var current = chars[0];
    //记录能插的地方
    var index = 0;
    //记录当前字符的个数
    var count = 1;

    // debugger;

    for(let i=1,len = chars.length;i<len;i++){
        let temp = chars[i];
        
        if(temp!=current){

          chars[index++] = current;

          let arr = new Array();

          if(count>1){
            while(count>0){
              arr.push(count%10);
              count = Math.floor(count/10);
            }

            for(let j=arr.length-1;j>=0;j--){
              chars[index++]=arr[j].toString();
            }
          }

          current = temp;
          count = 1;

        }else{
          count++;
        }

    }

    //最后如果全是重复的,直接跳出了,可能没有计算到
    chars[index++] = current;

    let arr = new Array();

    if(count>1){
      while(count>0){
        arr.push(count%10);
        count = Math.floor(count/10);
      }

      for(let j=arr.length-1;j>=0;j--){
        chars[index++]=arr[j].toString();
        }
    }

    return index;
};

 

以上是关于LeetCode443-压缩字符串(双索引)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode中等443压缩字符串 / 面试题01.06

443. 压缩字符串『简单』

07-pandas双索引

LeetCode 443 压缩字符串[双指针] HERODING的LeetCode之路

LeetCode 443. 压缩字符串 / 653. 两数之和 IV - 输入 BST / 235. 二叉搜索树的最近公共祖先

为什么在转换const双索引参数时会得到-Wincompatible-pointer-types警告