任务是创建一个函数,该函数可以将任何非负整数用作参数,并以降序返回其数字。本质上,重新排列数字以创建可能的最高数字。
示例:
输入:21445
->预期输出:54421
输入:145263
->预期输出:654321
输入:1254859723
->预期输出:9875543221
我的想法是将数字分解为单个字符串,并推入数组,然后对它们进行降序排序,然后再将其重新设置为数字。但是有更好的方法来解决这个问题吗?
答案 0 :(得分:1)
您可以在""
上拆分String并将其映射以将每个项目转换为数字。然后,您可以使用Array.prototype.sort
将其降序排列。如果您希望将其作为字符串,则可以在""
上加入它。
var str = "92345";
var numStr = str.split('').map(function(item) {
return +item;
});
var orderedArr = numStr.sort(function(a,b){
return b-a;
});
var orderedStr = orderedArr.join("");
console.log(orderedArr);
console.log(orderedStr);
一种更简短的方法是使用一元运算符将String转换为数字,在""
上将其拆分,对其进行排序,然后在""
上将其加入。
var str = "91785";
function orderDesc(str){
return +str.split('').sort((a,b)=>b-a).join('');
}
console.log(orderDesc(str));
答案 1 :(得分:0)
我想这就是我要做的方式。但是,请确保正确实施Array.sort()
。这不是stable排序。根据引擎(V8,SpiderMonkey,Chakra)的不同,您可能会得到不同的结果。
答案 2 :(得分:0)
我不会转换为字符串,因为它很直观,您正在使用数字,因此建议您坚持使用数字。
无法确定我的方法是否具有更好的性能,但是有跟踪它的方法,例如Millis计数器和内存分配监视。
while (number > 0) {
array.push(number % 10);
number /= 10;
}
array.sort();
foreach (val in array) {
number += val;
number *= 10;
}
return number;
答案 3 :(得分:0)
num = 234564
num1 = str(num)
list1 = list(num1)
list2 = sorted(list1, reverse=True)
string_1 = ''.join(list2)
final_integer = int(string_1)
return final_integer
答案 4 :(得分:0)
function descendingOrder(n){
var n = n.toString().split('');
var descendingNumber = n.sort((a, b)=> b-a).join('');
console.log("The Descending Number is =",descendingNumber);
}
descendingOrder(13245);
答案 5 :(得分:0)
最终的解决方案是这样,但我们只需要将字符串放回 Number。
m{10cm}