关注
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { static List<string> output = new ArrayList<>(); public static void main(String[] args) { Scanner in = new Scanner(System.in); int count = in.nextInt(); int[] numbers = new int[count]; for (int i = 0; i < count; i++) { numbers[i] = in.nextInt(); } Stack<integer> stack = new Stack<>(); String curOut = ""; process(numbers,stack,0,curOut); Collections.sort(output); for(String curr:output){ System.out.println(curr); } } /** * stack要么进,要么出。先进一个,处理完这个进的,然后恢复原样;再出,处理完这个出的,就完事了。 * @param numbers 编号数组 * @param stack 核心栈 * @param i 当前编号 * @param curOut 当前已经出栈的数字 */ public static void process(int[] numbers, Stack<integer> stack, int i, String curOut) { //如果出栈数字已经满了,就先添加 if(curOut.length() == numbers.length) { output.add(curOut); } //如果出栈的数字没有满,此时可以出栈也可以进栈,都可以。 //这里先做出栈 //出栈需要建立在栈本身不为空的基础上 if(!stack.isEmpty()) { //出栈 int temp = stack.pop(); //继续后面的动作,一条路走到黑 //出栈,该数组添加到temp process(numbers,stack,i,curOut + temp); //这种出栈的场景走完后,下一个场景,进栈,不过先恢复原样 stack.push(temp); } //开始做入栈场景 //入账时要确保还有数据入账 if (i < numbers.length) { //入账 int temp2 = numbers[i]; stack.push(temp2); //继续后面的操作,一条路走到黑 //i位置移动到下一个 process(numbers,stack,i+ 1,curOut); //这种场景走完后,恢复原样 stack.pop(); } } } 把大佬的代码研究了几天,注释了一下</integer></integer></string>
点赞
牛客热帖
更多
正在热议
更多
# 赚钱的意义在这一刻具象化 #
2772次浏览 69人参与
# 哪些瞬间让你真切感受到了工作的乐趣 #
23071次浏览 98人参与
# 今年春招是金一银二嘛? #
3647次浏览 50人参与
# AI求职实录 #
1833次浏览 57人参与
# 1月小结:你过的开心吗? #
907次浏览 30人参与
# 你的第一家实习公司是什么档次? #
2615次浏览 47人参与
# 抛开难度不谈,你最想去哪家公司? #
2046次浏览 63人参与
# 为什么有人零实习也能进大厂? #
2959次浏览 68人参与
# AI时代的工作 VS 传统时代的工作,有哪些不同? #
5926次浏览 139人参与
# 你的landing期是如何度过的? #
5703次浏览 97人参与
# 工作后会跟朋友渐行渐远吗 #
57678次浏览 411人参与
# 除了Java,最推荐学什么技术? #
4101次浏览 114人参与
# 当你问AI“你会取代我的工作吗”,它说_? #
2172次浏览 80人参与
# 汇川技术求职进展汇总 #
177627次浏览 1055人参与
# 我是XXX,请攻击我最薄弱的地方 #
55611次浏览 388人参与
# 选offer应该考虑哪些因素 #
139820次浏览 983人参与
# 你觉得什么岗位会被AI替代 #
36139次浏览 247人参与
# 如果工作一直消耗情绪还要继续做吗 #
18499次浏览 88人参与
# 你上一次加班是什么时候? #
128850次浏览 737人参与
# 非技术岗简历怎么写 #
284071次浏览 3185人参与