1. 程式人生 > >179. Largest Number 排成最大的數字(重要!)

179. Largest Number 排成最大的數字(重要!)

https://leetcode.com/problems/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.

注意兩點:

1.比較函式不是直接比較兩個string的大小

因為30>3,但是3卻因為放在前面;所以因為比較字串組合起來的大小;

2.注意首位有0的情況

class Solution {
public:
	struct cmp{
		bool operator()(const string& a, const string& b)const{
			string ab = a + b;
			string ba = b + a;
			return ab > ba;
		}//注意這個比較函式
	};
	string largestNumber(vector<int>& nums) {
		int len = nums.size();
		if (len == 0){
			return "";
		}
		vector<string> strNums(len);
		for (int i = 0; i < len; i++){
			strNums[i] = to_string(nums[i]);
		}
		sort(strNums.begin(), strNums.end(), cmp());
		string res;
		for (int i = 0; i < len; i++){
			res.append(strNums[i]);
		}

		//[0,0]的情況
		while (res.size()>1 && res[0]=='0'){
			res = res.substr(1);
		}
		
		return res;
	}
};


相關推薦

179. Largest Number 排成數字重要

https://leetcode.com/problems/largest-number/ Given a list of non negative integers, arrange them such that they form the largest numb

兩個數字不能構成的數字兩個數字不同時為奇或同時為偶

urn a* 數量 小朋友 mes 算法 大小 數字 ace 小明開了一家糖果店。他別出心裁:把水果糖包成4顆一包和7顆一包的兩種。糖果不能拆包賣。 小朋友來買糖的時候,他就用這兩種包裝來組合。當然有些糖果數目是無法組合出來的,比如要買 10 顆糖。 你可以用計算機測

關於超過js的number型別9007199254740992,的解決辦法

bug經過:點選修改無法展示資訊(修改時呼叫queryOne,以id(long)為值,頁面傳過去的id=1480042498255640-00 ,在資料庫中該id=148004249825564012,即錯誤的id)根本原因:js的number型別有個最大值(安全值)。即2的

【劍指offer】59、隊列的不熟

最大值 ber 元素 const 所有 刪除元素 windows 窗口 push_back 題目一 給定一個數組和滑動窗口的大小,請找出所有滑動窗口裏的最大值。例如,{2,3,4,2,6,2,5,1}以及窗口大小3,那麽存在6個滑動窗口,最大值分別為{4,4,6,6,6,5

m段的動態規劃

Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now y

【洛谷 P3381】小費用SPFA+EK

在最大流的基礎上把BFS換成SPFA即可。 #include<bits/stdc++.h> using namespace std; const int maxn = 100050; const int INF = 0x3f3f3f3f; int head[maxn]; bo

CCF——波動2016-9

問題描述   小明正在利用股票的波動程度來研究股票。小明拿到了一隻股票每天收盤時的價格,他想知道,這隻股票連續幾天的最大波動值是多少,即在這幾天中某天收盤價格與前一天收盤價格之差的絕對值最大是多少。

ZZULIOJ 1176: 查詢字串指標專題

題目描述從鍵盤上輸入多個字串(每個串不超過5個字元且沒有空格),用”*****”作為串輸入結束的標記。從所輸入的若干字串中,找出一個最大的串,並輸出該串。要求最大串的查詢通過呼叫編寫的函式實現 void find(char *name[], int n, int *p) { //

劍指offer——連續子陣列的42題

題目:輸入一個整型陣列,數組裡有正數也有負數。陣列中的一個或連續多個整陣列成一個子陣列。求所有子陣列的和的最大值。要求時間複雜度為O(n)。 此題同時也是leetcode的原題。此處用兩種方法解答。方法一,叫不出名字,但只需一次遍歷,看程式碼很好理解。方法二,利用動態規劃,

網路流之Dinic演算法

程式碼對應於 POJ - 3281 #include <iostream> #include <cstring> #include <cstdio> #include <queue> #define fuck

小費用講解+模板

         問題引入:最小費用最大流問題是經濟學和管理學中的一類典型問題。在一個網路中每段路徑都有“容量”和“費用”兩個限制的條件下,此類問題的研究試圖尋找出:流量從A到B,如何選擇路徑、分配經過路徑的流量,可以在流量最大的前提下,達到所用的費用最小的要求。如n輛

KM演算法求帶權二分圖的匹配完備匹配

1.基礎知識普及 二分圖的概念 二分圖又稱作二部圖,是圖論中的一種特殊 模型。 設G=(V,{R})是一個無向圖。如頂點集V可分 割為兩個互不相交的子集,並且圖中每條邊 依附的兩個頂點都分屬兩個不同的子集。則圖G成為二分圖。 通俗來講,二分圖指的是這樣一種

小費用拆邊

題目大概意思是,有N個城市M條邊,要從1城市到N城市運送K的物品,求最少花費,每個邊有一個係數ai花費的錢是ai*這條邊上運送物資數的平方,比如在係數為3的邊上運送了2的物品,則需要3*2*2的花費; 思路:由於每條邊的容量不超過5,所以可以把每一條邊拆成容量

網路流小割記錄路徑【POJ1815】

  【POJ1815】 出處:原帖 題意:就是求s點到t點,最少去掉幾個點使得他們不連通。如果無解輸出NO ANSWER!    解題思路 因為最小割只能求割掉幾條邊的解,我們要求的是割掉幾個點。那麼我們可以這樣考慮:把每個點拆成入點和出點。入點->出點權值為1。那麼

uoj#79. 一般圖匹配帶花樹

傳送門 帶花樹 不加證明的說一下過程好了:每次從一個未匹配點\(S\)出發bfs,設\(S\)為\(1\)類點,如果當前點\(v\)在本次bfs中未經過,分為以下兩種情況 1.\(v\)是未匹配點,那麼從\(S\)到\(v\)的路徑就是一條增廣路,把這條路徑增廣即可 2.\(v\)是匹配點,那麼把\(

旋轉陣列中的數字多種方法

題目描述:把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非遞減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0

7-5 交換小值和15 分

7-5 交換最小值和最大值(15 分) 本題要求編寫程式,先將輸入的一系列整數中的最小值與第一個數交換,然後將最大值與最後一個數交換,最後輸出交換後的序列。 注意:題目保證最大和最小值都是唯一

分治法找C語言

根據分治思路找最大值: #include <stdio.h> int max(int a,int b){ if (a >= b) return a; else return b; } int find_max(int i,int j,int num[]){ int

6-5 求自定型別元素的10 分

6-5 求自定型別元素的最大值(10 分)本題要求實現一個函式,求N個集合元素S[]中的最大值,其中集合元素的型別為自定義的ElementType。函式介面定義:ElementType Max( ElementType S[], int N ); 其中給定集合元素存放在陣列S

求n個數中兩數異或的字母樹

#include <stdio.h> #include <string.h> #include <math.h> #include <iostream> #include <string> #include <