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

259 lines
8.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

> **[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>进入。
** 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:
```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;
int i = low+1;
String pivot = arr[low];
while (i <= high) {
//比较大小
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--);
} else {
i++;
}
}
quickSort(arr,left,low-1);
quickSort(arr,high+1,right);
}
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
```