题目描述:
给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,
一共N辆火车,每辆火车以数字1-9编号,火车站只有一个方向进出,同时停靠在火车站的列车中,
只有后进站的出站了,先进站的才能出站。
要求输出所有火车出站的方案,以字典序排序输出。
数据范围:1\le n\le 10\1≤n≤10
示例:
输入:
3
1 2 3
复制
输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 2 1
复制
说明:
第一种方案:1进、1出、2进、2出、3进、3出
第二种方案:1进、1出、2进、3进、3出、2出
第三种方案:1进、2进、2出、1出、3进、3出
第四种方案:1进、2进、2出、3进、3出、1出
第五种方案:1进、2进、3进、3出、2出、1出
请注意,[3,1,2]这个序列是不可能实现的。
let num = parseInt(readline())
let arr = readline().split(' ')
solution(arr, num);
function solution(arr, num) {
let length = arr.length;
let res = [];
let inTrainArr = [];
let outTrainArr = [];
helper(arr, num, inTrainArr, outTrainArr);
res.sort();
res.forEach((item) => {
console.log(item.join(" "));
});
function helper(stand, n, inTrainArr, outTrainArr) {
if (outTrainArr.length === n) {
res.push([...outTrainArr]);
}
if (stand.length === n) {
inTrainArr.push(stand.shift());
helper(stand, n, inTrainArr, outTrainArr);
return;
}
if (stand.length > 0) {
var cur = stand.shift();
inTrainArr.push(cur);
helper(stand, n, inTrainArr, outTrainArr);
inTrainArr.pop();
stand.unshift(cur);
}
if (inTrainArr.length > 0) {
var cur = inTrainArr.pop();
outTrainArr.push(cur);
helper(stand, n, inTrainArr, outTrainArr);
outTrainArr.pop();
inTrainArr.push(cur);
}
}
}