LeetCode -- Largest Number

来源:互联网 发布:java中格式化 编辑:程序博客网 时间:2024/06/03 18:36
题目描述:
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;}}}


1 0