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 压缩字符串[双指针] HERODING的LeetCode之路
LeetCode 443. 压缩字符串 / 653. 两数之和 IV - 输入 BST / 235. 二叉搜索树的最近公共祖先