Tag: 递归

在Java中计算树中的节点

首先,我发誓这不是家庭作业,这是我在接受采访时被问到的一个问题。 我想我弄得一团糟(尽管我确实意识到解决方案需要递归)。 这是一个问题: 实现count()方法,该方法返回树中的节点数。 如果节点没有左子节点或右子节点,则相关的getXXChild()方法将返回null class Tree { Tree getRightChild() { // Assume this is already implemented } Tree getLeftChild() { // Assume this is already implemented } int count() { // Implement me } } 我提出这个问题的理由只是好奇地看到了正确的解决方案,从而衡量了我的糟糕程度。 干杯,托尼

递归Java – 堆栈

我正在进行递归,在这种情况下…我需要求和一个堆栈的所有值。 我有两个function,但只能使用10000条记录。 我需要一分钟。 请帮帮我! 码: public static void main(String[] args) { Recursion r = new Recursion(); Stack stack = new Stack(); Random rnd = new Random(); int stack_size = 10000; for (int i = 0; i < stack_size; i++) { stack.push(rnd.nextInt(10 – 1)); } int s = r.stack2(stack, 0); //int s = r.stack1(stack, stack_size, 0, […]

如何将嵌套Java集合中的所有项目展平为单个列表?

给定复杂的嵌套对象集合,例如: Set<List<Map<String, List>>> complexNestedCollection; 是否存在通用方法来展平它并获得包含在其中的所有Object的单个List ? 一些细节: 该列表不应包含集合对象本身或映射键 – 仅包含最低级别的值。 它应尽可能遵循相同的顺序 – 因此在示例中,列表中的项目将按顺序排列,而映射/集合的排序将取决于实现。 它可以选择性地排除重复 更新:理想情况下,它应检测/处理任何级别的循环引用,例如List<List> ,其中外部List将自身包含为成员。 (感谢AdrianJałoszewski在下面的评论中提到这一点)。 注意:实际的用例是从List<List>获取所有字符串,这可以通过两个循环轻松完成,但它让我对一般情况感到疑惑。

优化冒泡排序(Java)

我想知道如何优化冒泡排序,以便它忽略已经排序的元素,即使在第一次传递之后。 Eg. [4, 2, 3, 1, 5, 6] –> [2, 3, 1, **4, 5, 6**] 我们观察到[4,5,6]已经按排序顺序,如何修改我的代码,以便在下一遍中忽略这3个元素? (这意味着排序会更有效?)你建议使用递归方法吗? public static void bubblesort(int[] a) { for(int i=1; i<a.length; i++) { boolean is_sorted = true; for(int j=0; j a[j+1]) { int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; is_sorted = false; } } if(is_sorted) return; } […]

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”}, […]

使用递归在Java中以正确格式打印菱形图案

我的程序从文件中读取值,并使用递归方法根据这些值打印星号模式。 我只是在让一切正常排队时遇到问题。 输出应该如下所示: * * * * * * * * * 关于输出的格式,方向是: “请注意,图案围绕中心线对称(垂直)对齐。图案应在每条线(水平)上对称排列,并提示:使用线值来帮助空间。” 但我的输出看起来像这样: * * * * * * * * * 我用来获取这种模式的代码: public static void makePattern(int thisRow, int num) { if(thisRow >= num) { for(int i = 0; i < num; i++) { System.out.print(" " + "*" + " "); } System.out.println(); […]

Java递归迷宫求解器问题

我正在尝试使用递归编写一个迷宫求解器,它似乎尝试每个方向一次,然后停止,我无法弄清楚为什么。 如果您发现问题,请告诉我。 键0是开放空间1是墙2是路径3的一部分是迷宫的末端 public class Maze{ public static void main(String[] args){ int[][] maze = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1}, {1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1}, {1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1}, {1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1}, {1,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1}, {1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1}, {1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1}, {1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1}, {1,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,1}, {1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1}, {1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1}, {1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1}, {1,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1}, {1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1}, {1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1}, {1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1}, {1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1}, {1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1}, {1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1}, {1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1}, {1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1}, {1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1}, {1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1}, {1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1}, {1,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1}, {1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1}, {1,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,1,0,1,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,1}, {1,0,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,0,1,0,1,0,1,1,1,0,1,0,1,0,1,1,1,1,1,0,1}, {1,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,1,0,1}, {1,1,1,1,1,0,1,1,1,1,1,1,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,0,1}, {1,0,0,0,1,0,1,0,0,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,1,0,1}, {1,0,1,1,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,1,0,1,0,1}, {1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1}}; boolean[][] posCheck = new boolean[maze.length][maze[0].length]; int […]

递归Fibonacci memoization

我需要一些帮助,我正在为Universiy的Programming II课程编写一个程序。 问题是要求使用递归计算斐波纳契数列。 必须将计算出的斐波那契数存储在一个数组中,以阻止不必要的重复计算并减少计算时间。 我设法让程序在没有arrays和记忆的情况下工作,现在我正在尝试实现它而且我被卡住了。 我不确定如何构建它。 我用谷歌搜索并浏览了一些书,但没有找到太多帮助我解决如何实施解决方案。 import javax.swing.JOptionPane; public class question2 { static int count = 0; static int [] dictionary; public static void main(String[] args) { int answer; int num = Integer.parseInt(javax.swing.JOptionPane.showInputDialog(“Enter n:”)); javax.swing.JOptionPane.showMessageDialog(null, “About to calculate fibonacci(” + num + “)”); //giving the array “n” elements dictionary= new int [num]; if (dictionary.length>=0) […]

为Palindrome创建一个递归方法

我试图在Java中使用递归创建一个Palindrome程序但是我被卡住了,这是我到目前为止所做的: public static void main (String[] args){ System.out.println(isPalindrome(“noon”)); System.out.println(isPalindrome(“Madam I’m Adam”)); System.out.println(isPalindrome(“A man, a plan, a canal, Panama”)); System.out.println(isPalindrome(“A Toyota”)); System.out.println(isPalindrome(“Not a Palindrome”)); System.out.println(isPalindrome(“asdfghfdsa”)); } public static boolean isPalindrome(String in){ if(in.equals(” “) || in.length() == 1 ) return true; in= in.toUpperCase(); if(Character.isLetter(in.charAt(0)) } public static boolean isPalindromeHelper(String in){ if(in.equals(“”) || in.length()==1){ return true; } } […]

什么是Java中Fibonacci类序列的非递归解决方案?

给出这个函数的伪代码 f(0) = 1; f(1) = 3; f(n) = 3 * f(n – 1) – f(n – 2); // for n >= 2. 有这种非递归方式吗?