摘要:最近碰到一个问题,就是用求数组中所有数字能拼接出的最大整数,数组的每一项为多带带的拼接项,不能再拆开,例如中和分别为要被拼接的数字,而不是说还能继续拆分为和。具体需求为,将拼接为。
最近碰到一个问题,就是用javascript求数组中所有数字能拼接出的最大整数,数组的每一项为多带带的拼接项,不能再拆开,例如[2,34]中2和34分别为要被拼接的数字,而不是说34还能继续拆分为3和4。
具体需求为,将[7,321,35,4]拼接为7435321。
我设计的算法如下:
function insertSort(arr) { let res = [arr[0]]; for (let i = 1, len = arr.length; i < len; i++) { let temp = arr[i]; for (let j = i - 1; j >= 0; j--) { if (!compareNum(res[j],temp)) { res[j + 1] = res[j]; res[j] = temp; } else { res[j + 1] = temp; break; } } } return res; } function compareNum(a,b) { a =""+a; b = ""+b; let aLen=a.length; let bLen=b.length; let aIndex=0; let bIndex=0; while (aIndexb[bIndex]){ return true; }else{ return false; } } let arr=[5,2,1,38]; // let arr=[5,2,1,38,52,4,5,593,8,55,555,492,493,7,9,61,66,6]; // let arr=[5,2,1,38,52,4,5,593,61,6]; function toInt(arr) { let newArr=insertSort(arr); document.write(newArr); return newArr.join(""); } let intNum=toInt(arr); console.log(intNum);
上面算法用的是自己封装的insertSort插入排序。
数组自身有sort方法,如果借用Array.prototype.sort方法,代码就会简化很多。代码如下:
var arr = [5,552,5,542,522,525,523,597,550,555,50,52]; function toInt(arr) { let newArr=arr.sort((a,b)=>{ a =""+a; b = ""+b; let aLen=a.length; let bLen=b.length; let aIndex=0; let bIndex=0; while (aIndexb[bIndex]){ return -1; }else{ return 1; } }); console.log(newArr); return newArr.join(""); } let intNum=toInt(arr); console.log(intNum);
现在整体讲下上面算法的思路:
将数组中所有数字转为字符串,按照首字母大小进行整体排序。
如果首字母相同,就通过while循环向后比较,比如52和53比较时,首字母5相同就比较2和3,如果相比较的两个字符串长度不一样,先被循环完的字符串将始终用最后一位字母进行后续比较,比如523和52进行比较时,前两位相同,523的3就和52中的最后一位2就行比较,以此类推。
算法的整体思路是就是尽可能的保证高位数字比较大,难点在于处理首字母相同的字符串。感兴趣的小伙伴,如果有更好的思路或疑问,可以在下面评论中提出来。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/84872.html
摘要:输出在中,值表示一个空对象指针,而这正是使用操作符检测值时会返回的原因。属性规定必需在提交之前填写输入字段。通过字面量方式创建的数组对象是属于类的一个实例,所以返回,故弹出。第期年月日代码运行的结果输出前端教程。 第1期(2016年4月6日): (1)js中关闭当前窗口的方法是:window.close(); 第2期(2016年4月7日): (1)js中使字符串中的字符变为小写的方法是...
摘要:输出在中,值表示一个空对象指针,而这正是使用操作符检测值时会返回的原因。属性规定必需在提交之前填写输入字段。通过字面量方式创建的数组对象是属于类的一个实例,所以返回,故弹出。第期年月日代码运行的结果输出前端教程。 第1期(2016年4月6日): (1)js中关闭当前窗口的方法是:window.close(); 第2期(2016年4月7日): (1)js中使字符串中的字符变为小写的方法是...
摘要:输出在中,值表示一个空对象指针,而这正是使用操作符检测值时会返回的原因。属性规定必需在提交之前填写输入字段。通过字面量方式创建的数组对象是属于类的一个实例,所以返回,故弹出。第期年月日代码运行的结果输出前端教程。 第1期(2016年4月6日): (1)js中关闭当前窗口的方法是:window.close(); 第2期(2016年4月7日): (1)js中使字符串中的字符变为小写的方法是...
阅读 1923·2021-11-24 09:39
阅读 3233·2021-09-22 14:58
阅读 1132·2019-08-30 15:54
阅读 3299·2019-08-29 11:33
阅读 1765·2019-08-26 13:54
阅读 1568·2019-08-26 13:35
阅读 2457·2019-08-23 18:14
阅读 749·2019-08-23 17:04