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;
};
原文地址:https://www.cnblogs.com/weizhibin1996/p/9769450.html