码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-10-10 23:58:12      阅读:318      评论:0      收藏:0      [点我收藏+]

标签:res   位置   new   计算   count   src   取整   结束   color   

技术分享图片

因为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-压缩字符串(双索引)

标签:res   位置   new   计算   count   src   取整   结束   color   

原文地址:https://www.cnblogs.com/weizhibin1996/p/9769450.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!