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<Node>();
	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;
	}
}


}


你可能感兴趣的:(LeetCode -- Largest Number)