Tag: 嵌套循环

将递归函数转换为for循环?

每个递归函数都有一个等效的循环吗? (两者都达到了相同的效果)。 我有这个递归函数: private static boolean recur(String word, int length) { if(length == 1 || length == 2) return false; if(length == 0) return true; if(words[length].contains(word.substring(0, length))) return recur(word.substring(length), word.length() – length); return recur(word, length-1); } 假设单词是Set [],并且单词[i] =具有长度为i的单词的集合。 我要做的是:用一个单词启动递归(比如说,“stackoverflow”,没有空格),我试图找出这个单词是否可以切成子词(“堆栈”,“结束”,“流程”) ..子词的最小长度是3,并且假设长度i的子词在Set words [i]中。 我可以确认这段代码有效,但它可能有内存问题,所以我想将它转为循环..如果可能的话。 你需要更多信息吗? 谢谢。

Java 8嵌套循环,包含流和性能

为了练习Java 8流,我尝试将以下嵌套循环转换为Java 8流API。 它计算a ^ b(a,b <100)的最大数字总和,并在我的Core i5 760上占用~0.135s。 public static int digitSum(BigInteger x) { int sum = 0; for(char c: x.toString().toCharArray()) {sum+=Integer.valueOf(c+””);} return sum; } @Test public void solve() { int max = 0; for(int i=1;i<100;i++) for(int j=1;j<100;j++) max = Math.max(max,digitSum(BigInteger.valueOf(i).pow(j))); System.out.println(max); } 我的解决方案,我希望由于并行性而更快,实际上需要0.25秒(没有parallel() 0.19s): int max = IntStream.range(1,100).parallel() .map(i -> IntStream.range(1, 100) .map(j->digitSum(BigInteger.valueOf(i).pow(j))) […]

Java:列表列表的笛卡尔积

我有一个问题,这是一个普通的编程问题,但我的实现是在Java中,所以我将以这种方式提供我的示例 我有一个这样的课: public class Foo { LinkedHashMap<String, Vector> dataStructure; public Foo(LinkedHashMap<String, Vector> dataStructure){ this.dataStructure = dataStructure; } public String[][] allUniqueCombinations(){ //this is what I need to do } } 我需要从LinkedHashMap生成一个嵌套数组,它表示LHM中所有值的每个唯一组合。 例如,如果我的LHM看起来像这样(伪代码,但我认为你可以得到这个想法……): {“foo” => [“1″,”2″,”3”], “bar” => [“3″,”2”], “baz” => [“5″,”6″,”7”]}; 那么我的String [] []应该是这样的: { {“foo”,”bar”,”baz”}, {“1″,”3″,”5”}, {“1″,”2″,”5”}, {“1″,”3″,”6”}, {“1″,”2″,”6”}, {“1″,”3″,”7”}, {“1″,”2″,”7”}, {“2″,”3″,”5”}, {“2″,”2″,”5”}, {“2″,”3″,”6”}, {“2″,”2″,”6”}, […]