179. Largest Number

LeetCode medium original: C# #array #csharp #leetcode #medium #sort #string
Der Aufgabentext wird für die gewählte Sprache aus dem Russischen übersetzt. Code bleibt unverändert.

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

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

Beispiel:

Input: nums = [10,2]

Output: "210"

C# Lösung

zugeordnet/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++ Lösung

Auto-Entwurf, vor dem Einreichen prüfen
#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 Lösung

zugeordnet/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 Lösung

zugeordnet/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 Lösung

zugeordnet/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 Lösung

zugeordnet/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 в строку и отсортировать Array строк с использованием специального компаратора, который для двух строк 𝑎 и b сравнивает результаты конкатенации 𝑎+𝑏 и 𝑏+𝑎.

2️⃣

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

3️⃣

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

😎

Stellen zu dieser Aufgabe

aktive Stellen with overlapping task tags are angezeigt.

Alle Stellen
Es gibt noch keine aktiven Stellen.