网上看了好多这个解题的思路,都不是特别的清楚,今天花了2个多小时,终于做出来,可能不是最好的解决方案,还请指证。
解题思路:
1.先定义一个整数数组,将它们转换为字符串的数组,
2.不能直接用排序去排序它们,比如:24,213,如果按照从大到小排列会为:21324,其实最大为:24213。因此,假设A=24,B=213,如果A+B>B+A(这里是字符串相加比较,不是加法运算),那么排列的顺序为A,B,反之B,A,
3.将它们按照从大到小的顺序相加
具体代码如下:
- import java.util.Scanner;
- public class Main {
- public static void main(String[] args) {
- Scanner sc = new Scanner(System.in);
- StringBuilder st=new StringBuilder();
- int n = sc.nextInt();
- int[] num = new int[n];
- for (int i = 0; i < n; i++) {
- num[i] = sc.nextInt();
- }
- String[] str=new String[n];
- for(int i=0;i<n;i++) {
- str[i]=num[i]+"";
- }
- for(int i=0;i<n;i++) {
- for(int j=i;j<n;j++) {
- int max1=Integer.parseInt(str[i]+str[j]);
- int max2=Integer.parseInt(str[j]+str[i]);
- if(max1<max2) {
- String temp=str[j];
- str[j]=str[i];
- str[i]=temp;
- }
- }
- }
- for(int i=0;i<n;i++) {
- st.append(str[i]);
- }
- System.out.println(st);
- }
- }