关注
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>
点赞
相关推荐
牛客热帖
更多
正在热议
更多
# 找工作能把i人逼成什么样 #
15941次浏览 179人参与
# 上班到公司第一件事做什么? #
110535次浏览 756人参与
# 你今年做了几份实习? #
10690次浏览 156人参与
# 工作两年想退休了 #
204633次浏览 1814人参与
# 一上班就想____,这正常吗? #
5858次浏览 100人参与
# 运营面经 #
146213次浏览 1323人参与
# 参加过提前批的机械人,你们还参加秋招么 #
103917次浏览 1641人参与
# 网易求职进展汇总 #
169476次浏览 1414人参与
# 如果公司降薪,你会跳槽吗? #
111757次浏览 721人参与
# 大厂面试初体验 #
83954次浏览 385人参与
# 金三银四,你有感觉到吗 #
663432次浏览 6032人参与
# 大学最后一个寒假,我想…… #
72524次浏览 727人参与
# 大家每天通勤多久? #
64677次浏览 415人参与
# 什么样的公司千万别去 #
28384次浏览 151人参与
# 面试尴尬现场 #
206094次浏览 823人参与
# 春招你拿到offer了吗 #
762600次浏览 9777人参与
# 用一句话形容你的团队氛围 #
29266次浏览 248人参与
# 业务面应该做哪些准备 #
79325次浏览 813人参与
# 一起聊华为 #
169088次浏览 822人参与
# 第一份工作应该选高薪还是热爱? #
141461次浏览 1050人参与
海康威视公司福利 1407人发布