关注
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>
点赞
相关推荐
10-30 11:21
北京邮电大学 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 找工作能把i人逼成什么样 #
15211次浏览 178人参与
# 上班到公司第一件事做什么? #
109959次浏览 750人参与
# 你今年做了几份实习? #
10252次浏览 152人参与
# 工作两年想退休了 #
204016次浏览 1808人参与
# 一上班就想____,这正常吗? #
5706次浏览 99人参与
# 大厂面试初体验 #
83782次浏览 385人参与
# 大学最后一个寒假,我想…… #
72357次浏览 727人参与
# 大家每天通勤多久? #
64585次浏览 415人参与
# 面试尴尬现场 #
205702次浏览 822人参与
# 运营面经 #
146164次浏览 1322人参与
# 什么样的公司千万别去 #
28227次浏览 149人参与
# 第一份工作应该选高薪还是热爱? #
141354次浏览 1050人参与
# 如果公司降薪,你会跳槽吗? #
111173次浏览 715人参与
# 你找工作的时候用AI吗? #
163273次浏览 857人参与
# 0经验如何找实习? #
27500次浏览 461人参与
# 学历对求职的影响 #
572648次浏览 3971人参与
# 一起聊华为 #
168810次浏览 821人参与
# 字节出了豆包coding模型 #
6915次浏览 61人参与
# 一人推荐一个值得去的通信/硬件公司 #
228057次浏览 2067人参与
# 25年找工作是什么难度? #
16841次浏览 169人参与
滴滴公司福利 1778人发布