}
public static void fun(List list, int[] nums, String temp) {
if (temp.length() == nums.length) {
list.add(temp);
return;
}
for (int num : nums) {
if (!temp.contains(String.valueOf(num))) {
fun(list, nums, temp + num);
}
}
}
- 如果是求出栈顺序, 就不会有312这个结果
package com.demo.Solution;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int count = scan.nextInt();
int[] nums = new int[count];
for (int i = 0; i < count; i++) {
nums[i] = scan.nextInt();
}
List list = new ArrayList<>();
Stack stack = new Stack<>();
fun(list, “”, stack, nums, 0, 0);
Collections.sort(list);
for (String str : list) {
System.out.println(str);
}
}
}
//insert为入栈次数, out为出栈次数
public static void fun(List list, String str, Stack stack, int[] nums, int out, int insert) {
if (out == nums.length) {
list.add(str.trim());
return;
}
//入栈次数没到就先入栈
if (insert < nums.length) {
stack.push(nums[insert]);
fun(list, str, stack, nums, out, insert + 1);
//恢复现场
stack.pop();
}
//栈中有数据就出栈
if (!stack.isEmpty()) {
int temp = stack.pop();
fun(list, str + " " + temp, stack, nums, out + 1, insert);
//恢复现场,因为栈顶的元素可以出栈也可以不出栈
stack.push(temp);
}
}
}
-
这道题在牛客上就有https://www.nowcoder.com/questionTerminal/97ba57c35e9f4749826dc3befaeae109
-
解题思路就是我们建立一个栈, 统计他的入栈次数和出栈次数, 并且使用字符串记住他的出栈顺序, 在每一次递归里如果入栈次数没到就先入栈, 如果入栈次数到了,就递归出栈, 并且栈中的元素有俩种情况, 一个是出栈了, 一个是留着不出栈, 那我们统计了出栈的情况, 就应该恢复现场再去统计没出栈的情况
结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
[外链图片转存中…(img-euxbToFA-1714331552667)]
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!