拼数 题解
拼数
http://www.nowcoder.com/questionTerminal/bf617f7a721b4df3874b79169e692d96
这道题用一个排序来处理这个String数组。
排序不是比较大小,而是比较两个String前后不同排列的大小。
比如21和211,要是用大小排序的话组合数来的数为21121,这样并不如21211大,所以要用两个String不同位置的大小比较进行排序。
import java.math.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.*; public class Main { public static void main(String args[])throws IOException { StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); Scanner input = new Scanner(System.in); int n = input.nextInt(); String a[] = new String[n]; for(int i=0;i<n;i++) { a[i] = input.next(); } String temp; for(int i=0;i<n-1;i++) { for(int k=0;k<n-1-i;k++) { if((a[k]+a[k+1]).compareTo(a[k+1]+a[k])>0) { temp = a[k]; a[k] = a[k+1]; a[k+1] = temp; } } } for(int i=n-1;i>=0;i--) { System.out.print(a[i]); } } }