179. Largest Number

LeetCode medium original: C# #array #csharp #leetcode #medium #sort #string
Le texte du problème est traduit du russe pour la langue sélectionnée. Le code reste inchangé.

Дан список неотрицательных целых чисел nums. Организуйте их таким образом, чтобы они составляли наибольшее number и return его.

Поскольку результат может быть очень большим, вам необходимо вернуть строку вместо целого числа.

Exemple:

Input: nums = [10,2]

Output: "210"

C# solution

correspondant/original
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++ solution

brouillon automatique, à relire avant soumission
#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 solution

correspondant/original
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 solution

correspondant/original
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 solution

correspondant/original
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 solution

correspondant/original
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️⃣

Преобразование и сортировка: Преобразовать каждое number в строку и отсортировать tableau строк с использованием специального компаратора, который для двух строк 𝑎 и b сравнивает результаты конкатенации 𝑎+𝑏 и 𝑏+𝑎.

2️⃣

Проверка на нули: Если после сортировки первый element tableauа равен "0", вернуть "0", так как все числа в tableauе нули.

3️⃣

Формирование результата: Конкатенировать отсортированные строки для формирования наибольшего числа и вернуть это number в виде строки.

😎

Vacancies for this task

offres actives with overlapping task tags are affichés.

Toutes les offres
Il n'y a pas encore d'offres actives.