标签: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; };
标签:res 位置 new 计算 count src 取整 结束 color
原文地址:https://www.cnblogs.com/weizhibin1996/p/9769450.html