程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode -- Largest Number

LeetCode -- Largest Number

編輯:C++入門知識

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;
	}
}


}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved