【问题标题】:Input: a word's string. Prints all rearrangements of the given string without repeating. JAVA输入:一个单词的字符串。打印给定字符串的所有重新排列而不重复。 JAVA
【发布时间】:2020-02-15 15:14:51
【问题描述】:

我正在尝试在 Java 中实现它,但我不知道如何实现。有什么建议吗?

示例。

输入:

abc

输出:

abc
ab
后退
bca
出租车
cba

输入:

aab

输出:

aab
阿巴

【问题讨论】:

标签: java anagram


【解决方案1】:

这是我能想到的最简单的方法

 String str= "abc";
            ArrayList<String> letters = new ArrayList<String>();
            HashSet<String> combinations = new HashSet<String>();
            for(int i = 0; i<str.length();i++) {
//Break String into letters
                letters.add(str.substring(i,i+1));
            }
            for(int i = (str.length()*2)+1;i>0;i--) {
//Will loop through maximum possible outcomes
                String result = "";
                String bin = Integer.toBinaryString(i);
//System.out.println(bin);
                while(bin.length()<3) {
                    bin="0"+bin;
                }
                for(int b = bin.length();b>0;b--) {
                    if(bin.substring(b-1,b).equals("1"))result = result.concat(letters.get(b-1));
                }
                for(int b = bin.length();b>0;b--) {
                    if(bin.substring(b-1,b).equals("0"))result = result.concat(letters.get(b-1));
                }
                combinations.add(result);
            }
            System.out.println(str);
            for(String c : combinations) {
                System.out.println(c);
            }

它使用二进制循环遍历原始字符串的数组,然后将结果添加到哈希集以删除重复项

【讨论】:

  • 我需要学习ArrayList和HashSet。我从来没有听说过。
  • @Fredgrub 它们对于存储和访问多个变量很有用。如果您有兴趣了解更多信息,JavaDocs 和 GoalKicker 中有一些很棒的资源
猜你喜欢
  • 2017-11-09
  • 1970-01-01
  • 2016-01-07
  • 2021-01-25
  • 2018-03-11
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 2020-06-26
相关资源
最近更新 更多