剑指offer打卡10-把数组排成最小的数(java版)
1. 考察知识点
2. 题目
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
3. 思路
- 将两数拼接在一起进行比较:
- ab > ba 应该将 b 放在 a 的前面,所以交换数组中a和b的位置
- ab <= ba 应该 a 放在 b 的前面,所以数组中的位置不发生变化
- 通过循环将每两个数组合都进行比较,最后得出的序列即为最小数
- 拿数组{3,32,321}来说:
- 将3和32取出拼接比较:332 > 323 ,所以改变这两个数的位置,数组变为{32,3,321}
- 将32和321取出拼接比较:32321 > 32132 ,所以改变这两个数的位置,数组变为{321,3,32}
- 将3和32取出拼接比较:332 > 323 ,所以改变这两个数的位置,数组变为{321,32,3}
- 所以最小数位321323
4. 代码实现
import java.util.ArrayList;
public class Solution {
public String PrintMinNumber(int [] numbers) {
String str = "";
for (int i = 0; i < numbers.length; i++) {
for (int j = i+1; j < numbers.length; j++) {
int a = Integer.valueOf(numbers[i]+""+numbers[j]);
int b = Integer.valueOf(numbers[j]+""+numbers[i]);
if (a > b){
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
}
for (int i = 0; i < numbers.length; i++) {
str = String.valueOf(numbers[i])
}
return str;
}