例如有如下一组数字:2, 8, 9, 35, 38, 86, 211, 380, 384, 3856。
问题是:使用 javascript 代码,对这组数字进行排列,要求排列后的数字为这组数字所能组成的数字当中的最大值。(如:6, 68, 634, 6270 这组数字组成的最大数为 6866346270)
补充说明:以上数字只作为示例,要求代码可以排列任意一组数字。
//排列组合
function permutate(array, permutatedArray) {
if (!permutatedArray) {
permutatedArray = [];
}
if (array.length > 1) {
//弹出第一个数
var elementCur = array.shift();
//排列剩余的数组
permutate(array, permutatedArray);
//返回剩余的数组的排列长度
var permutatedArrayLen = permutatedArray.length;
//第一个数与其他剩余数组所有数组组合
for (var j = 0; j < permutatedArrayLen; j++) {
//弹出不齐的组
var p = permutatedArray.shift();
//把当前元素放到排列好的数组的所有位置
for (var i = 0; i <= p.length; i++) {
//复制排列好的数组
var r = p.slice(0);
//插入数据到数组的位置
r.splice(i, 0, elementCur);
//保存
permutatedArray.push(r)
}
}
//退出条件
} else {
permutatedArray.push([array[0]]);
}
return permutatedArray;
}
//排序
function orderBy(arr){
var sort = [];
permutate(arr, sort);
//获取
var max = sort[0].join('');
for(var i = 0; i < sort.length; i++ ){
var item = sort[i].join('');
if(max < item){
max = item;
}
}
return max;
}
var arr = [ 6, 68, 634, 6270];
console.log( orderBy(arr)) //6866346270
谢谢!代码有点绕,先来研究研究!
@yamybl: 先排列组合,找到所有的可能,然后再,比较出最大值
@muamaker: 原来是这个思路,谢谢了!
总长度是一样的.
所以按字符串排序后合并就行了.
你好,首先感谢回复!问题好像没有这么简单,你可以再看看题目,并不是简单的按照大小排列,而是要求这组数字连接后成为这组数字所能组成的最大值。如:6, 68, 634, 6270 这组数字组成的最大数为 6866346270
var bubbleSort=function(arr){
for(var i=0;i<arr.length-1;i++){
for(var j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
var temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
return arr;
}
var arr = ['225','3','352'];
console.log(bubbleSort(arr));定义为一个字符串数组,排完后合并就行
感谢回复!问题好像要更复杂一些,你可以再看看题目
@yamybl: 我看了,知道你的意思是当第一个数字一样的时候,要比较第二个数,你可以拿这个函数测试一下
哦,这样还有一个问题
@liangzai1996: 谢谢,学习了!不过对于 6, 68, 634, 6270 这组数字排序后还是有点误差,不过还是要谢谢你!