摘要:最近碰到一個問題,就是用求數組中所有數字能拼接出的最大整數,數組的每一項為多帶帶的拼接項,不能再拆開,例如中和分別為要被拼接的數字,而不是說還能繼續拆分為和。具體需求為,將拼接為。
最近碰到一個問題,就是用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就行比較,以此類推。
算法的整體思路是就是盡可能的保證高位數字比較大,難點在于處理首字母相同的字符串。感興趣的小伙伴,如果有更好的思路或疑問,可以在下面評論中提出來。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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中使字符串中的字符變為小寫的方法是...
閱讀 1938·2021-11-24 09:39
閱讀 3278·2021-09-22 14:58
閱讀 1162·2019-08-30 15:54
閱讀 3315·2019-08-29 11:33
閱讀 1788·2019-08-26 13:54
閱讀 1598·2019-08-26 13:35
閱讀 2468·2019-08-23 18:14
閱讀 762·2019-08-23 17:04