Дан список неотрицательных целых чисел nums. Организуйте их таким образом, чтобы они составляли наибольшее число и верните его.
Поскольку результат может быть очень большим, вам необходимо вернуть строку вместо целого числа.
Пример:
Input: nums = [10,2]
Output: "210"
C# решение
сопоставлено/оригиналpublic class Solution {
public string LargestNumber(int[] nums) {
string[] strNums = nums.Select(num => num.ToString()).ToArray();
Array.Sort(strNums, (a, b) => (b + a).CompareTo(a + b));
if (strNums[0] == "0") {
return "0";
}
return string.Concat(strNums);
}
}
C++ решение
auto-draft, проверить перед отправкой#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public string LargestNumber(vector<int>& nums) {
vector<string> strNums = nums.Select(num => num.ToString()).ToArray();
Array.Sort(strNums, (a, b) => (b + a).CompareTo(a + b));
if (strNums[0] == "0") {
return "0";
}
return string.Concat(strNums);
}
}
Java решение
сопоставлено/оригиналclass Solution {
private class LargerNumberComparator implements Comparator<String> {
@Override
public int compare(String a, String b) {
String order1 = a + b;
String order2 = b + a;
return order2.compareTo(order1);
}
}
public String largestNumber(int[] nums) {
String[] asStrs = new String[nums.length];
for (int i = 0; i < nums.length; i++) {
asStrs[i] = String.valueOf(nums[i]);
}
Arrays.sort(asStrs, new LargerNumberComparator());
if (asStrs[0].equals("0")) {
return "0";
}
String largestNumberStr = new String();
for (String numAsStr : asStrs) {
largestNumberStr += numAsStr;
}
return largestNumberStr;
}
}
JavaScript решение
сопоставлено/оригиналclass Solution {
largestNumber(nums) {
const strNums = nums.map(String);
strNums.sort((a, b) => (b + a).localeCompare(a + b));
if (strNums[0] === "0") {
return "0";
}
return strNums.join('');
}
}
Python решение
сопоставлено/оригиналclass LargerNumKey(str):
def __lt__(x, y):
return x + y > y + x
class Solution:
def largestNumber(self, nums):
largest_num = "".join(sorted(map(str, nums), key=LargerNumKey))
return "0" if largest_num[0] == "0" else largest_num
Go решение
сопоставлено/оригиналpackage main
import (
"sort"
"strconv"
"strings"
)
type Solution struct{}
func (s *Solution) LargestNumber(nums []int) string {
strNums := make([]string, len(nums))
for i, num := range nums {
strNums[i] = strconv.Itoa(num)
}
sort.Slice(strNums, func(i, j int) bool {
return strNums[i]+strNums[j] > strNums[j]+strNums[i]
})
if strNums[0] == "0" {
return "0"
}
return strings.Join(strNums, "")
}
func main() {
solution := Solution{}
nums := []int{3, 30, 34, 5, 9}
result := solution.LargestNumber(nums)
println(result)
}
Algorithm
1️⃣
Преобразование и сортировка: Преобразовать каждое число в строку и отсортировать массив строк с использованием специального компаратора, который для двух строк 𝑎 и b сравнивает результаты конкатенации 𝑎+𝑏 и 𝑏+𝑎.
2️⃣
Проверка на нули: Если после сортировки первый элемент массива равен "0", вернуть "0", так как все числа в массиве нули.
3️⃣
Формирование результата: Конкатенировать отсортированные строки для формирования наибольшего числа и вернуть это число в виде строки.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.