Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找字符串中L-R的所有组合以遍历数据结构_Java_Algorithm_Permutation - Fatal编程技术网

Java 查找字符串中L-R的所有组合以遍历数据结构

Java 查找字符串中L-R的所有组合以遍历数据结构,java,algorithm,permutation,Java,Algorithm,Permutation,我想创建所有可能的变体来遍历数据结构。当我穿越时,我可以向左(L)或向右(R)。因此,我的计划是在遍历数据结构之前,生成所有可能的路径。每个字符都应作为遍历的指令 我需要一个方法来生成以下内容: private List<String> createPaths(int len){ List<String> result = new ArrayList<>(); // no clue how to generate

我想创建所有可能的变体来遍历数据结构。当我穿越时,我可以向左(L)或向右(R)。因此,我的计划是在遍历数据结构之前,生成所有可能的路径。每个字符都应作为遍历的指令

我需要一个方法来生成以下内容:

private List<String> createPaths(int len){
            List<String> result = new ArrayList<>();
            // no clue how to generate them
            return result;
     }
私有列表创建路径(int len){
列表结果=新建ArrayList();
//不知道如何生成它们
返回结果;
}
对于len=1,结果应为: {L,R}

对于len=2,结果应为: {LL,LR,RR,RL}

对于len=3,结果应为: {LLL,LLR,LRL,LRR,RLL,RLR,RRL,RRR}

我已经试着用二进制数来解决这个问题,但我失败了。

二进制数是一个很好的方法。 因此,首先将路径想象为二进制数。
因此,对于
len=3
可以得到长度为3的所有二进制数

这些是0到7的数字(十进制)。(=2^3=8个数字)

因此,编写一个循环,从
0到(2^len-1)
而不是简单地将数字转换为二进制表示,并用R替换0,用L替换1(所有前导0都会得到长度为len的二进制表示)

二进制数”是一个非常好的方法。 因此,首先将路径想象为二进制数。
因此,对于
len=3
可以得到长度为3的所有二进制数

这些是0到7的数字(十进制)。(=2^3=8个数字)

因此,编写一个循环,从
0到(2^len-1)

而不是简单地将数字转换为二进制表示,然后用R替换0,用L替换1(所有前导0都可以得到长度为len的二进制表示)

我觉得你使用二进制数的技巧实际上是可行的。我们可以生成一个固定宽度和零填充二进制数的集合,这些二进制数介于0和一些2的幂之间。然后,将所有零替换为
L
,将所有零替换为
R

private List<String> createPaths(int len) {
    List<String> result = new ArrayList<>();
    String formatWidth = "%" + len + "s";

    for (int i=0; i < Math.pow(2, len); ++i) {
         String val = String.format(formatWidth, Integer.toBinaryString(i))
             .replace(' ', '0')
             .replace("0", "L")
             .replace("1", "R");
         result.add(val);
    }

    return result;
}

System.out.println(createPaths(3));

你使用二进制数的建议对我来说似乎是可行的。我们可以生成一个固定宽度和零填充二进制数的集合,这些二进制数介于0和一些2的幂之间。然后,将所有零替换为
L
,将所有零替换为
R

private List<String> createPaths(int len) {
    List<String> result = new ArrayList<>();
    String formatWidth = "%" + len + "s";

    for (int i=0; i < Math.pow(2, len); ++i) {
         String val = String.format(formatWidth, Integer.toBinaryString(i))
             .replace(' ', '0')
             .replace("0", "L")
             .replace("1", "R");
         result.add(val);
    }

    return result;
}

System.out.println(createPaths(3));

非常感谢你。我不确定这是否会产生正确的结果。我试过这个。问题是最主要的zeroes@Stimpson猫:你也可以不带前导零,在左边的末尾加上
R
s,直到长度合适。你知道硬币掉下来的那一刻,你感觉自己像个懦夫,因为你一直没有看到简单的解决方案吗?。这是一个悲伤和喜悦的混合体。谢谢你帮助我,史密斯先生。非常感谢。我不确定这是否会产生正确的结果。我试过这个。问题是最主要的zeroes@Stimpson猫:你也可以不带前导零,在左边的末尾加上
R
s,直到长度合适。你知道硬币掉下来的那一刻,你感觉自己像个懦夫,因为你一直没有看到简单的解决方案吗?。这是一个悲伤和喜悦的混合体。谢谢你帮我史密斯先生。嘿,酷。我想知道为什么我昨天花了那么多小时,而你只花了几分钟。谢谢。现在我必须理解你的解决方案。@stimpsonca我在这个网站上花了太多的钱。一个副作用是我可以快速回答Java和SQL问题。将
Math.pow(2,len)
更改为
(1嗨,酷。我想知道为什么我昨天花了这么多时间,而你只花了几分钟。非常感谢。现在我必须理解你的解决方案。@stimpsonca我在这个网站上花了太多时间。一个副作用是我可以快速回答Java和SQL问题。将
Math.pow(2,len)
更改为
(1)