Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 66adda9

Browse files
committed
feat: add solutions to lc problem: No.0179
No.0179.Largest Number
1 parent 6c3ae56 commit 66adda9

File tree

6 files changed

+251
-43
lines changed

6 files changed

+251
-43
lines changed

‎solution/0100-0199/0179.Largest Number/README.md‎

Lines changed: 108 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838

3939
<!-- 这里可写通用的实现逻辑 -->
4040

41+
**方法一:自定义排序**
42+
4143
先转成字符串列表,再对字符串列表进行字典序降序排列。最后将列表所有字符串拼接即可。
4244

4345
<!-- tabs:start -->
@@ -47,13 +49,11 @@
4749
<!-- 这里可写当前语言的特殊实现逻辑 -->
4850

4951
```python
50-
from functools import cmp_to_key
51-
5252
class Solution:
5353
def largestNumber(self, nums: List[int]) -> str:
54-
num_list = list(map(str, nums))
55-
num_list.sort(key=cmp_to_key(lambda x, y: int(y + x) -int(x + y)))
56-
return '0' if num_list[0] == '0' else ''.join(num_list)
54+
nums = [str(v) for v innums]
55+
nums.sort(key=cmp_to_key(lambda a, b: 1if a + b < b + a else-1))
56+
return "0" if nums[0] == "0" else "".join(nums)
5757
```
5858

5959
### **Java**
@@ -63,17 +63,111 @@ class Solution:
6363
```java
6464
class Solution {
6565
public String largestNumber(int[] nums) {
66-
List<String> numList = new ArrayList<>();
67-
for (int num : nums) {
68-
numList.add(String.valueOf(num));
66+
List<String> vs = new ArrayList<>();
67+
for (int v : nums) {
68+
vs.add(v +"");
6969
}
70-
numList.sort((a, b) -> (b + a).compareTo(a + b));
71-
if ("0".equals(numList.get(0))) return "0";
72-
StringBuilder sb = new StringBuilder();
73-
for (String s : numList) {
74-
sb.append(s);
70+
vs.sort((a, b) -> (b + a).compareTo(a + b));
71+
if ("0".equals(vs.get(0))) {
72+
return "0";
73+
}
74+
return String.join("", vs);
75+
}
76+
}
77+
```
78+
79+
### **C++**
80+
81+
```cpp
82+
class Solution {
83+
public:
84+
string largestNumber(vector<int>& nums) {
85+
vector<string> vs;
86+
for (int v : nums) vs.push_back(to_string(v));
87+
sort(vs.begin(), vs.end(), [](string& a, string& b) {
88+
return a + b > b + a;
89+
});
90+
if (vs[0] == "0") return "0";
91+
string ans;
92+
for (string v : vs) ans += v;
93+
return ans;
94+
}
95+
};
96+
```
97+
98+
### **Go**
99+
100+
```go
101+
func largestNumber(nums []int) string {
102+
vs := make([]string, len(nums))
103+
for i, v := range nums {
104+
vs[i] = strconv.Itoa(v)
105+
}
106+
sort.Slice(vs, func(i, j int) bool {
107+
return vs[i]+vs[j] > vs[j]+vs[i]
108+
})
109+
if vs[0] == "0" {
110+
return "0"
111+
}
112+
return strings.Join(vs, "")
113+
}
114+
```
115+
116+
### **C#**
117+
118+
```cs
119+
using System;
120+
using System.Globalization;
121+
using System.Collections.Generic;
122+
using System.Linq;
123+
using System.Text;
124+
125+
public class Comparer: IComparer<string>
126+
{
127+
public int Compare(string left, string right)
128+
{
129+
return Compare(left, right, 0, 0);
130+
}
131+
132+
private int Compare(string left, string right, int lBegin, int rBegin)
133+
{
134+
var len = Math.Min(left.Length - lBegin, right.Length - rBegin);
135+
for (var i = 0; i < len; ++i)
136+
{
137+
if (left[lBegin + i] != right[rBegin + i])
138+
{
139+
return left[lBegin + i] < right[rBegin + i] ? -1 : 1;
140+
}
141+
}
142+
143+
if (left.Length - lBegin == right.Length - rBegin)
144+
{
145+
return 0;
146+
}
147+
if (left.Length - lBegin > right.Length - rBegin)
148+
{
149+
return Compare(left, right, lBegin + len, rBegin);
150+
}
151+
else
152+
{
153+
return Compare(left, right, lBegin, rBegin + len);
154+
}
155+
}
156+
}
157+
158+
public class Solution {
159+
public string LargestNumber(int[] nums) {
160+
var sb = new StringBuilder();
161+
var strs = nums.Select(n => n.ToString(CultureInfo.InvariantCulture)).OrderByDescending(s => s, new Comparer());
162+
163+
var nonZeroOccurred = false;
164+
foreach (var str in strs)
165+
{
166+
if (!nonZeroOccurred && str == "0") continue;
167+
sb.Append(str);
168+
nonZeroOccurred = true;
75169
}
76-
return sb.toString();
170+
return sb.Length==0?"0":sb.ToString();
77171
}
78172
}
79173
```

‎solution/0100-0199/0179.Largest Number/README_EN.md‎

Lines changed: 106 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,31 +38,123 @@
3838
### **Python3**
3939

4040
```python
41-
from functools import cmp_to_key
42-
4341
class Solution:
4442
def largestNumber(self, nums: List[int]) -> str:
45-
num_list = list(map(str, nums))
46-
num_list.sort(key=cmp_to_key(lambda x, y: int(y + x) -int(x + y)))
47-
return '0' if num_list[0] == '0' else ''.join(num_list)
43+
nums = [str(v) for v innums]
44+
nums.sort(key=cmp_to_key(lambda a, b: 1if a + b < b + a else-1))
45+
return "0" if nums[0] == "0" else "".join(nums)
4846
```
4947

5048
### **Java**
5149

5250
```java
5351
class Solution {
5452
public String largestNumber(int[] nums) {
55-
List<String> numList = new ArrayList<>();
56-
for (int num : nums) {
57-
numList.add(String.valueOf(num));
53+
List<String> vs = new ArrayList<>();
54+
for (int v : nums) {
55+
vs.add(v + "");
56+
}
57+
vs.sort((a, b) -> (b + a).compareTo(a + b));
58+
if ("0".equals(vs.get(0))) {
59+
return "0";
60+
}
61+
return String.join("", vs);
62+
}
63+
}
64+
```
65+
66+
### **C++**
67+
68+
```cpp
69+
class Solution {
70+
public:
71+
string largestNumber(vector<int>& nums) {
72+
vector<string> vs;
73+
for (int v : nums) vs.push_back(to_string(v));
74+
sort(vs.begin(), vs.end(), [](string& a, string& b) {
75+
return a + b > b + a;
76+
});
77+
if (vs[0] == "0") return "0";
78+
string ans;
79+
for (string v : vs) ans += v;
80+
return ans;
81+
}
82+
};
83+
```
84+
85+
### **Go**
86+
87+
```go
88+
func largestNumber(nums []int) string {
89+
vs := make([]string, len(nums))
90+
for i, v := range nums {
91+
vs[i] = strconv.Itoa(v)
92+
}
93+
sort.Slice(vs, func(i, j int) bool {
94+
return vs[i]+vs[j] > vs[j]+vs[i]
95+
})
96+
if vs[0] == "0" {
97+
return "0"
98+
}
99+
return strings.Join(vs, "")
100+
}
101+
```
102+
103+
### **C#**
104+
105+
```cs
106+
using System;
107+
using System.Globalization;
108+
using System.Collections.Generic;
109+
using System.Linq;
110+
using System.Text;
111+
112+
public class Comparer: IComparer<string>
113+
{
114+
public int Compare(string left, string right)
115+
{
116+
return Compare(left, right, 0, 0);
117+
}
118+
119+
private int Compare(string left, string right, int lBegin, int rBegin)
120+
{
121+
var len = Math.Min(left.Length - lBegin, right.Length - rBegin);
122+
for (var i = 0; i < len; ++i)
123+
{
124+
if (left[lBegin + i] != right[rBegin + i])
125+
{
126+
return left[lBegin + i] < right[rBegin + i] ? -1 : 1;
127+
}
58128
}
59-
numList.sort((a, b) -> (b + a).compareTo(a + b));
60-
if ("0".equals(numList.get(0))) return "0";
61-
StringBuilder sb = new StringBuilder();
62-
for (String s : numList) {
63-
sb.append(s);
129+
130+
if (left.Length - lBegin == right.Length - rBegin)
131+
{
132+
return 0;
133+
}
134+
if (left.Length - lBegin > right.Length - rBegin)
135+
{
136+
return Compare(left, right, lBegin + len, rBegin);
137+
}
138+
else
139+
{
140+
return Compare(left, right, lBegin, rBegin + len);
141+
}
142+
}
143+
}
144+
145+
public class Solution {
146+
public string LargestNumber(int[] nums) {
147+
var sb = new StringBuilder();
148+
var strs = nums.Select(n => n.ToString(CultureInfo.InvariantCulture)).OrderByDescending(s => s, new Comparer());
149+
150+
var nonZeroOccurred = false;
151+
foreach (var str in strs)
152+
{
153+
if (!nonZeroOccurred && str == "0") continue;
154+
sb.Append(str);
155+
nonZeroOccurred = true;
64156
}
65-
return sb.toString();
157+
return sb.Length==0?"0":sb.ToString();
66158
}
67159
}
68160
```
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
string largestNumber(vector<int>& nums) {
4+
vector<string> vs;
5+
for (int v : nums) vs.push_back(to_string(v));
6+
sort(vs.begin(), vs.end(), [](string& a, string& b) {
7+
return a + b > b + a;
8+
});
9+
if (vs[0] == "0") return "0";
10+
string ans;
11+
for (string v : vs) ans += v;
12+
return ans;
13+
}
14+
};
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
func largestNumber(nums []int) string {
2+
vs := make([]string, len(nums))
3+
for i, v := range nums {
4+
vs[i] = strconv.Itoa(v)
5+
}
6+
sort.Slice(vs, func(i, j int) bool {
7+
return vs[i]+vs[j] > vs[j]+vs[i]
8+
})
9+
if vs[0] == "0" {
10+
return "0"
11+
}
12+
return strings.Join(vs, "")
13+
}
Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,13 @@
11
class Solution {
22
public String largestNumber(int[] nums) {
3-
List<String> numList = new ArrayList<>();
4-
for (int num : nums) {
5-
numList.add(String.valueOf(num));
3+
List<String> vs = new ArrayList<>();
4+
for (int v : nums) {
5+
vs.add(v + "");
66
}
7-
numList.sort((a, b) -> (b + a).compareTo(a + b));
8-
if ("0".equals(numList.get(0))) return "0";
9-
StringBuilder sb = new StringBuilder();
10-
for (String s : numList) {
11-
sb.append(s);
7+
vs.sort((a, b) -> (b + a).compareTo(a + b));
8+
if ("0".equals(vs.get(0))) {
9+
return "0";
1210
}
13-
return sb.toString();
11+
return String.join("", vs);
1412
}
1513
}
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
from functools import cmp_to_key
2-
3-
41
class Solution:
52
def largestNumber(self, nums: List[int]) -> str:
6-
num_list = list(map(str, nums))
7-
num_list.sort(key=cmp_to_key(lambda x, y: int(y+x) -int(x + y)))
8-
return '0' if num_list[0] == '0' else ''.join(num_list)
3+
nums = [str(v) forvinnums]
4+
nums.sort(key=cmp_to_key(lambda a, b: 1ifa+b<b + aelse-1))
5+
return "0" if nums[0] == "0" else "".join(nums)

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /