zoukankan      html  css  js  c++  java
  • 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;
    };
  • 相关阅读:
    解决SecureCRT连接linux终端中文显示乱码
    处理二维数组两题
    struts2校验总结
    专题:分治法
    常用表格编写
    写Action的三种方法
    Struts2入门-十分简单的登陆
    汉诺塔动画
    记录一下字符串处理的问题
    记录一些指针的应用方法
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9769450.html
Copyright © 2011-2022 走看看