LeetCode -- Largest Number
題目描述:
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
給定一個由非負數構成的數組nums,對所有元素進行排序拼成字符串s,求當s最大時的情況。
本題的問題類型歸為排序問題。
對於nums中的n1和n2來說:
1. 當n1[0](第1位) > n2[0]時,返回n1
2. 如果相同,則比較str(n1n2)和str(n2n1),取較大的那個。
實現代碼:
public class Solution {
public string LargestNumber(int[] nums)
{
var nodes = new List();
for(var i = 0;i < nums.Length; i++){
nodes.Add(new Node(nums[i]));
}
var list = nodes.OrderByDescending(x=>x);
var s = string.Join(,list);
if(s[0] == '0'){
return 0;
}
return s;
}
public class Node : IComparable
{
public int val;
public Node(int v)
{
val = v;
}
public override string ToString()
{
return val.ToString();
}
public int CompareTo(object obj)
{
var n2 = obj as Node;
var n1 = this;
var s1 = n1.ToString();
var s2 = n2.ToString();
if (s1[0] < s2[0])
{
return -1;
}
else if (s1[0] > s2[0])
{
return 1;
}
var v1 = s1 + s2;
var v2 = s2 + s1;
var i = 0;
while (i < v1.Length)
{
if (v1[i] < v2[i])
{
return -1;
}
else if (v1[i] > v2[i])
{
return 1;
}
i++;
}
return 0;
}
}
}