algorithm-base/animation-simulation/数据结构和算法/合成.md

259 lines
8.7 KiB
Java
Raw Normal View History

2021-03-20 08:30:29 +00:00
> **[tan45du_one](https://raw.githubusercontent.com/tan45du/tan45du.github.io/master/个人微信.15egrcgqd94w.jpg)** ,备注 github + 题目 + 问题 向我反馈
>
>
>
> <u>[****](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u> 两个平台同步,想要和题友一起刷题,互相监督的同学,可以在我的小屋点击<u>[**刷题小队**](https://raw.githubusercontent.com/tan45du/test/master/微信图片_20210320152235.2pthdebvh1c0.png)</u>进入。
2021-03-20 07:58:25 +00:00
** Offer 45. ****leetcode 179 **
1:
> : [10,2]
> : "102"
2:
> : [3,30,34,5,9]
> : "3033459"
int
n n
m , n mn nm
mn nm mn < nm mn
> mn m n m = 10, n = 1mn = 101
mn < nm mn, mn m n m "小于" n
** "小于" < m mn n m n**
= 10n = 1 mn = 101 nm = 110
101 110 101 < 110 101 10 (m) 1(n) 10 1
****
便 A,B,C a,b,c
1AA = AA A A
2 A "小于" B AB < BA BA > AB B "大于" A
3
A B AB < BA, A B a b
AB = A * 10 ^ b + B , BA = B * 10 ^ a + A
> A = 10, a = 2 () B = 1, b = 1 ()
>
> AB = A * 10 ^ b + B = 10 * 10 ^ 1 + 1 = 101
>
> BA = B * 10 ^ a + A = 1 * 10 ^ 2 + 10 = 110
AB < BA **A * 10 ^ b + B < BA = B * 10 ^ a + A**
A / (10^a - 1) < B / (10 ^ b - 1)
B C BC < CB ,C c
BC = B * 10 ^ c + C
CB = C * 10 ^ b + B
BC < CB B / (10 ^ b - 1) < C / (10 ^ c - 1);
A / (10 ^ a - 1) < B / (10 ^ b - 1) B / (10 ^ b - 1) < C / (10 ^ c - 1);
A / (10^a - 1) < C / (10 ^ c - 1)
AC < CA A C
> mn < nm mn, mn m n
>
> m "小于" n
xxxxxxxx
A B , AB < BA A B A B
![](https://cdn.jsdelivr.net/gh/tan45du/test@master/photo/微信截图_20210306160015.5x1o7nyb6c40.png)
B A B A
****
XXXXBA, A "小于" B, B A
XXXXBA A "小于" B , AB < BA ,
XXXXAB XXXXBA
BAXXXX
B A
BXXXXA
XXXX C BCA
BCA ,
BCA B C C A
BC < CB, CA < ACB "小于 C", C A
B "小于" A
A B ,
A "小于" B , B A .
使
Java Code:
2021-03-20 07:58:25 +00:00
```java
class Solution {
public String minNumber(int[] nums) {
String[] arr = new String[nums.length];
//解决大数问题,将数字转换为字符串
for (int i = 0 ; i < nums.length; ++i) {
arr[i] = String.valueOf(nums[i]);
}
quickSort(arr,0,arr.length-1);
StringBuffer str = new StringBuffer();
for (String x : arr) {
str.append(x);
}
return str.toString();
}
public void quickSort(String[] arr, int left, int right) {
if (left >= right) {
return;
}
int low = left;
int high = right;
2021-03-20 07:58:25 +00:00
int i = low+1;
String pivot = arr[low];
while (i <= high) {
2021-03-20 07:58:25 +00:00
//比较大小
if ((pivot+arr[i]).compareTo(arr[i]+pivot) > 0 ) {
swap(arr,i++,low++);
} else if ((pivot+arr[i]).compareTo(arr[i]+pivot) < 0) {
swap(arr,i,high--);
2021-03-20 07:58:25 +00:00
} else {
i++;
}
}
quickSort(arr,left,low-1);
quickSort(arr,high+1,right);
2021-03-20 07:58:25 +00:00
}
public void swap(String[] arr, int i, int j) {
String temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
```
Python Code:
```python
from typing import List
class Solution:
def minNumber(self, nums: List[int])->str:
arr = [''] * len(nums)
#
for i in range(0, len(nums)):
arr[i] = str(nums[i])
self.quickSort(arr, 0, len(arr) - 1)
s = ''
for x in arr:
s += x
return s
def quickSort(self, arr: List[str], left: int, right: int):
if left >= right:
return
low = left
high = right
i = low + 1
pivot = arr[low]
while i <= high:
#
if int(pivot + arr[i]) > int(arr[i] + pivot):
self.swap(arr, i, low)
i += 1
low += 1
elif int(pivot + arr[i]) < int(arr[i] + pivot):
self.swap(arr, i, high)
high -= 1
else:
i += 1
self.quickSort(arr, left, low - 1)
self.quickSort(arr, high + 1, right)
def swap(self, arr: List[str], i: int, j: int):
temp = arr[i]
arr[i] = arr[j]
arr[j] = temp
```
2021-03-20 07:58:25 +00:00