【牛客】火車進站(字典序+棧的壓入彈出序列+字符串字典序)

給定一個正整數N代表火車數量,0<N<10,接下來輸入火車入站的序列,一共N輛火車,每輛火車以數字1-9編號。要求以字典序排序輸出火車出站的序列號。

輸入描述:

有多組測試用例,每一組第一行輸入一個正整數N(0<N<10),第二行包括N個正整數,範圍爲1到9。

輸出描述:

輸出以字典序從小到大排序的火車出站序列號,每個編號以空格隔開,每個輸出序列換行,具體見sample。

示例1

輸入

3
1 2 3

輸出

1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
 

import java.util.*;

public class Main {
    static LinkedList<int[]> list = new LinkedList<>();
    static LinkedList<String> list1 = new LinkedList<>();
    public static void swap(int [] array,int i,int j){
        int temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    遞歸求出所有字典序
    public static void transAll(int [] array,int start,int end){
        if(start == end){
            int [] temp = array.clone();
            list.add(temp);
            return;
        }
        for(int i = start;i<=end;i++){
            swap(array,i,start);
            transAll(array,start+1,end);
            swap(array,i,start);
        }
    }
    //判斷
    public static boolean panduan(int [] array1,int [] array2){
         Stack<Integer> stack = new Stack<>();
         int j = 0;
         for(int i =0;i<array1.length;i++){
             stack.push(array1[i]);
             while (!stack.isEmpty() && stack.peek() == array2[j]){
                 stack.pop();
                 j++;
             }
         }
         return stack.isEmpty();
    }
        //轉化成String
    public static String transforString(int []array){
        StringBuilder sb = new StringBuilder();
        for(int i = 0;i<array.length;i++){
            sb.append(array[i]);
            if(i != array.length-1 )
                sb.append(" ");
        }
        return sb.toString();
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNextInt()){
            int n = sc.nextInt();
            int [] array = new int[n];
            for(int i = 0;i<n;i++){
                array[i] = sc.nextInt();
            }
            transAll(array,0,array.length-1);
            for(int[] num:list){
                if(panduan(array,num) == true) {
                    list1.add(transforString(num));
                }
            }
            Collections.sort(list1);
            for(String s:list1)
                System.out.println(s);
        }
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章