Сначала я думал, что это вопрос перестановки и комбинации, но позже я обнаружил, что наименьшее число - это число с наименьшим значением в соответствующей позиции.
То есть, если вы сравните порядок сращивания двух строк, а затем отсортируете их, вы можете получить элемент, который должен находиться позади или перед данной строкой, если числа сращиваются.
Тогда окончательный результат сортировки - это окончательное минимальное значение.
В этом вопросе нельзя использовать перестановку и комбинацию, потому что при сравнении сумма каждого элемента будет намного больше, чем верхний предел int. Если сравнение String реализовано, длина будет непоследовательной, и ее будет трудно сравнивать, Даже если строковый бит реализован с точки зрения стоимости, это будет утомительная работа, не подходящая для собеседований.
Детали, на которые следует обратить внимание
Соединение строк с помощью StringBuilder, toString
Также есть детали реализации быстрой сортировки. Не поймите неправильно
Код ответа
public String minNumber(int[] nums) {
String[] nums_s = new String[nums.length];
for(int count=0;count<nums.length;count++){
nums_s[count] = nums[count] + "";
}
qSort(nums_s,0,nums.length-1);
StringBuilder res = new StringBuilder();
for(int count = 0;count<nums_s.length;count++){
res.append(nums_s[count]);
}
return res.toString();
}
public void qSort(String[] nums_s,int start,int end){
if(start <end){
int mid = Partitiion(nums_s,start,end);
qSort(nums_s,start,mid-1);
qSort(nums_s,mid+1,end);
}
}
public int Partitiion(String[] nums_s,int start,int end){
int key = start;
int i = start;
int j = end;
while(i<j){
while(i<j&&(nums_s[key] + nums_s[j]).compareTo(nums_s[j] + nums_s[key])<=0){
j--;
}
while(i<j&&(nums_s[key] + nums_s[i]).compareTo(nums_s[i] + nums_s[key])>=0){
i++;
}
swap(i,j,nums_s);
}
swap(key,j,nums_s);
return j;
}
public void swap(int a,int b,String[] nums){
String temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}