考古学家--二星

  • 有一个考古学家发现了一个石碑,但是很可惜,发现时其已经断裂成n断,原地发现n个断口整齐的碎片
  • 为了破解石碑内容,考古学家需要计算石碑文字组合数,
  • 输入描述
  • 第一行:输入n,表示n个碎片
  • 第二行:输入文字的内容,共n组,用空格分开,由于模拟石碑的碎片,所以不用考虑重复字符
  • 如: 3
  • a b c
  • 输出描述:
  • 输出所有的排列组合
  • 如:abc acb bca bac cab cba
import java.util.Stack;
public class Question38 {
    public static void main(String[] args) {
        //测试用例,实际可用Scanner进行测试
        char[] arr = new char[]{'a', 'b', 'c', 'd'};
        answer(arr);
    }
    public static void answer(char[] arr){
        //分析:如果是一个,则只有一个排列,如果是两个,则将第二个字符插入第一个的前两个位置,以此类推
        Stack<String> stack1 = new Stack<>();
        Stack<String> stack2 = new Stack<>();
        stack1.add(arr[0] + "");
        for (int i = 1; i < arr.length; i++) {
		  //此处可以优化一下,不用每次都从stack1开始,只要保证有一个为空就好了,这里懒的改了,有兴趣的小伙伴自己尝试
            while (!stack1.isEmpty()){
                String tempS = stack1.pop();
                for (int j = 0; j <= tempS.length(); j++) {
                    String s = tempS.substring(0, j) + arr[i] + tempS.substring(j);
                    stack2.add(s);
                }
            }
            while (!stack2.isEmpty()){
                stack1.add(stack2.pop());
            }
        }
        while (!stack1.isEmpty()){
            System.out.println(stack1.pop());
        }
    }
}

全部评论
# 没有两片相同的叶子,也没有两片相同的碎片。打印全排列,Python解法二(回溯): def backtrack(path): if len(path) == n: res.append("".join(path)) return for i in fragments: if i not in path: backtrack(path + [i]) n = int(input()) fragments = list(input().split()) res = [] backtrack([]) for i in sorted(res): print(i)
点赞 回复 分享
发布于 2022-12-09 23:37 北京
# 没有两片相同的叶子,也没有两片相同的碎片。因此,就是一个打印全排列的问题,标准的一个回溯题。 def backtrack(secs, path): if len(path) == n: res.append("".join(path)) return for i in range(len(secs)): backtrack(secs[:i] + secs[i+1:], path + [secs[i]]) n = int(input()) secs = list(input().split()) res = [] backtrack(secs, []) for i in sorted(res): print(i)
点赞 回复 分享
发布于 2022-12-09 22:55 北京

相关推荐

牛客383479252号:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
我面试,她问我有女朋友没
不太迷人的反派_:不过对象,还会结合你老家,意向城市等等,看你是否稳定。哥们,别多想
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务