当前位置: 首页 > 知识库问答 >
问题:

输入字符串的排列

田翔
2023-03-14

大家好,这是我在工作面试中遇到的一个基本问题,我正试图用Java实现输入字符串的所有排列,不幸的是,我无法实现这一点。

 import java.util.Scanner;
 public class Test2 {

static void permute(char[] x, int y){
    if (y == x.length)
    {
        for(int i = 0; i < x.length; i++){
            System.out.print(x[y]);
        }

    }
    else {
        for (int i = y; i < x.length;i++)
        {
            char temp = x[y];
            x[y] = x[i];
            x[i] = temp;

            permute(x, y + 1);

            temp = x[y];
            x[y] = x[i];
            x[i] = temp;
        }
    }
}
    public static void main(String [] Args){
        Scanner scan = new Scanner (System.in);
        System.out.println("Input any word :");
        String word = scan.nextLine();

        int n = word.length();
        char [] sequence = new char[n];
        for (int i = 0; i < n ; i++)
            sequence[i] = scan.next().charAt(0);
        System.out.println("These are the permutations: ");
            permute(sequence,0);
            }
 }

共有2个答案

西门嘉澍
2023-03-14
/**
 * Generates all permutations of a string given that all characters of that string are different.
 *
 * @param s
 *     the input string
 *
 * @return a set of all permutations from the given string
 */
public Set<String> generatePermutations(String s) {
    Set<String> permutations = new HashSet<String>();
    //Handling error scenarios
    if (s == null) {
        return null;
    } else if (s.length() == 0) {
        permutations.add("");
        return permutations;
    }

    char firstCharacter = s.charAt(0); // first character
    String remaining = s.substring(1); // Full string without first character
    Set<String> words = generatePermutations(remaining);
    for (String word : words) {
        for (int i = 0; i <= word.length(); i++) {
            permutations.add(insertCharacter(word, firstCharacter, i));
        }
    }
    return permutations;
}

/**
 * Given a collection of numbers that might contain duplicates, return all possible unique permutations. For
 * example, [1,1,2] have the following unique permutations: [1,1,2], [1,2,1], and [2,1,1].
 *
 * @param numbers
 *     the collection of integer numbers
 *
 * @return a set of all unique combinations from the given collection of numbers
 */
public HashSet<List<Integer>> generateCombinations(List<Integer> numbers) {
    Preconditions.checkNotNull(numbers);

    HashSet<List<Integer>> combinations = new HashSet<List<Integer>>();

    if (numbers.size() == 0) {
        combinations.add(new ArrayList<Integer>());
        return combinations;
    }

    int size = numbers.size();
    int lastNumber = numbers.get(size - 1);
    numbers.remove(size - 1);
    HashSet<List<Integer>> elements = generateCombinations(numbers);

    for (List<Integer> element : elements) {

        for (int i = 0; i < size; i++) {
            List<Integer> temp = new ArrayList<>(element);
            temp.add(i, lastNumber);
            // two Lists of the same base type (e.g. ArrayList) with the same content, in the same order, will compare as equal.
            //              // http://stackoverflow.com/questions/16657905/adding-arrays-with-same-values-to-hashset-results-in-duplicate-items
            combinations.add(temp);
        }
    }

    return combinations;
}
司寇灵均
2023-03-14

我正在做一个C语言的程序,我希望把它转换成你选择的语言不会太困难。

来源:-http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/

 类似资料:
  • 问题内容: 我在JSF支持bean中具有以下方法: 我在数据表中显示此: 但是我得到以下异常: 它是怎么引起的,我该如何解决?\ 问题答案: 所以, 导致此: 您是否正在运行您认为正在运行的代码?的参与在堆栈跟踪指示是 实际上 像一个数组。数组值只能通过像整数索引来获得,但你用字符串访问它作为导致了这一例外。 确保返回,而不是,并且已将的正确版本声明为托管Bean。

  • 主要内容:字符串的输出,字符串的输入其实在《 C语言输入输出》一章中我们已经提到了如何输入输出字符串,但是那个时候我们还没有讲解字符串,大家理解的可能不透彻,所以本节我们有必要再深入和细化一下。 字符串的输出 在C语言中,有两个函数可以在控制台(显示器)上输出字符串,它们分别是: puts():输出字符串并自动换行,该函数只能输出字符串。 printf():通过格式控制符输出字符串,不能自动换行。除了字符串,printf() 还能输

  • 问题内容: 所以,我有一个问题真的困扰我。我有一个用Java开发的简单解析器。这是相关代码: 输入文件是CSV文件,文件的第一项是整数。当我开始解析时,我立即得到这个异常: 我检查了文件,它的第一个值确实为1(该字段中没有其他字符),但仍然收到消息。我认为这可能是由于文件编码所致:它是UTF-8,带有Unix终端。该程序在Ubuntu 14.04上运行。欢迎寻找问题的任何建议。 问题答案: 您在该

  • 嗨,我的代码有一些问题,我需要接受一个3行的输入,并计算输入中“$”的数量。输入方法未注释为“scanf(”%[]s“,&userinput);”是唯一一个我发现采取所有3行输入,但我不能打破输入循环继续我的程序。 任何帮助都将不胜感激

  • 在高版本浏览器和 node.js 中,JavaScript 提供了 ArrayBuffer 和 Uint8Array 等 TypedArray 可以对二进制数据进行操作。但在低版本浏览器中并没有这些对象,而且这些对象没有自动伸缩性,不方便流式操作,相互转换也比较麻烦。 为兼容低版本浏览器,并且可以方便操作字符串和二进制数据,hprose for JavaScript 提供了一个 StringIO

  • 本文向大家介绍C语言实现输入一个字符串后打印出该字符串中字符的所有排列,包括了C语言实现输入一个字符串后打印出该字符串中字符的所有排列的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言实现输入一个字符串后打印出该字符串中字符的所有排列的方法,属于数学里的排列问题。是一个很实用的算法技巧。分享给大家供大家参考。具体实现方法如下: 例如输入字符串abc,则输出由字符a、b、c所能排列出来的