LeetCode:Largest Number - 求整型數組中各元素可拼合成的最大數字

一、題目名稱java

Largest Number(求整型數組中各元素可拼合成的最大數字)數組

二、題目地址code

https://leetcode.com/problems/largest-number/orm

三、題目內容排序

英文:Given a list of non negative integers, arrange them such that they form the largest number.leetcode

中文:給出一組非負整數,求這些非負整數能夠拼接出的最大數字開發

說明:例如,給出數組 [3, 30, 34, 5, 9],拼接出的最大數字爲9534330字符串

四、解題方法get

因爲本題輸入是一個整型數組,輸出是一個字符串,所以在輸出前,能夠考慮對數組進行一下排序。io

下面是一段WA(Wrong Answer)的Java代碼,先將數組轉換成一個字符串數組,再按照字符串的大小進行排序

import java.util.Arrays;
import java.util.Collections;

/**
 * 功能說明:LeetCode 179 - Largest Number
 * 開發人員:Tsybius2014
 * 開發時間:2015年8月8日
 */
public class Solution {
    
    /**
     * 最大的數字
     * @param nums 數組
     * @return
     */
    public String largestNumber(int[] nums) {

        String[] array = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            array[i] = String.valueOf(nums[i]);
        }
        Arrays.sort(array, Collections.reverseOrder());
        
        return String.join("", array);
    }
}

這個排序方法並不能按照題目要求正確排序。例如,數字8和883,若是按照字符串順序排序,883大於8,就會把883放在前面,8放在後面,最後輸出8838。而實際8883纔是正確結果。正確的排序方法,是使用排序方法進行比較時,比較兩個字符串(設爲A和B),以前後順序拼接而成的兩個字符串A+B和B+A,若是A+B更大,則A在前B在後,不然A在後B在前。

一段能夠AC(Accept)的Java代碼以下:

/**
 * 功能說明:LeetCode 179 - Largest Number
 * 開發人員:Tsybius2014
 * 開發時間:2015年8月8日
 */
public class Solution {
    
    /**
     * 最大的數字
     * @param nums 數組
     * @return
     */
    public String largestNumber(int[] nums) {

        String[] array = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            array[i] = String.valueOf(nums[i]);
        }

        String temp;
        for (int i = 0; i < array.length; i++) {
            for (int j = i + 1; j < array.length; j++) {
                if ((array[i] + array[j]).compareTo(array[j] + array[i]) < 0) {
                    temp = array[i];
                    array[i] = array[j];
                    array[j] =temp;
                }
            }
        }
        
        if (array[0].equals("0")) {
            return "0";
        } else {
            return String.join("", array);
        }
    }
}

END

相關文章
相關標籤/搜索