179. Largest Number

LeetCode medium original: C# #array #csharp #leetcode #medium #sort #string
Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

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

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

Ví dụ:

Input: nums = [10,2]

Output: "210"

C# lời giải

đã khớp/gố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++ lời giải

bản nháp tự động, xem lại trước khi gửi
#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ời giải

đã khớp/gốc
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ời giải

đã khớp/gốc
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ời giải

đã khớp/gốc
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ời giải

đã khớp/gốc
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 в строку и отсортировать mảng строк с использованием специального компаратора, который для двух строк 𝑎 и b сравнивает результаты конкатенации 𝑎+𝑏 и 𝑏+𝑎.

2️⃣

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

3️⃣

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

😎

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.