Java递归算法练习

使用java实现几个比较简单的递归面试题

写递归算法的时候,可以类比数学归纳法。

将每步先简化

单向链表与递归算法

实现单向链表

Node.java

/*** @ClassName Node* @Description TODO* @Version 1.0**/
public class Node {private final Integer vaule;private Node nextNode;public Node(Integer vaule) {this.vaule = vaule;}public Integer getVaule() {return vaule;}public Node getNextNode() {return nextNode;}public void setNextNode(Node nextNode) {this.nextNode = nextNode;}public static void printLinkedList(Node node) {while (node != null) {System.out.print(node.getVaule());System.out.print(" ");node = node.nextNode;}System.out.println();}
}

CreateLinkedList.java

import java.util.Arrays;
import java.util.List;/*** @ClassName CreateLinkedList* @Description TODO* @Version 1.0**/
public class CreateLinkedList {/*** 创建一个链表* @param data 数据源* @return 返回链表的头结点*/public Node createLinkedList(List<Integer> data){if (data.isEmpty()) {return null;}// 递归实现Node firstNode = new Node(data.get(0));Node nextNode = createLinkedList(data.subList(1, data.size()));firstNode.setNextNode(nextNode);return firstNode;}public static void main(String[] args) {CreateLinkedList createLinkedList = new CreateLinkedList();Node.printLinkedList(createLinkedList.createLinkedList(Arrays.asList(1)));Node.printLinkedList(createLinkedList.createLinkedList(Arrays.asList()));Node.printLinkedList(createLinkedList.createLinkedList(Arrays.asList(1,2,3,4)));}
}

反转链表

import java.util.Arrays;/*** @ClassName LinkedListReverser* @Description TODO* @Version 1.0**/
public class LinkedListReverser {public Node reverserLinkedList(Node head){// 相当于0的情况if (head == null) {return null;}// 一个节点的时候,递归到最后一个节点了if (head.getNextNode() == null) {return head;}// 递归实现Node newHead  = reverserLinkedList(head.getNextNode());head.getNextNode().setNextNode(head);head.setNextNode(null);return newHead;}public static void main(String[] args) {LinkedListReverser reverser = new LinkedListReverser();CreateLinkedList createLinkedList = new CreateLinkedList();Node.printLinkedList(reverser.reverserLinkedList(createLinkedList.createLinkedList(Arrays.asList())));Node.printLinkedList(reverser.reverserLinkedList(createLinkedList.createLinkedList(Arrays.asList(1,2,3,4))));Node.printLinkedList(reverser.reverserLinkedList(createLinkedList.createLinkedList(Arrays.asList(1))));}
}

数字组合

给定一组数字,指定数目的一组数,列出所有可能

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @ClassName ListGroup* @Description TODO* @Version 1.0**/
public class ListGroup {public void listDroup(List<Integer> select,List<Integer> data, int n){// n个数都已经选好了if (n == 0) {for (int i=0;i<select.size();i++) {System.out.print(select.get(i));System.out.print(" ");}System.out.println();return;}if (data.isEmpty()) {return;}// 选择第一个元素select.add(data.get(0));listDroup(select,data.subList(1,data.size()),n-1);// 不选择第一个元素select.remove(select.size()-1);listDroup(select,data.subList(1,data.size()),n);}public static void main(String[] args) {ListGroup listGroup = new ListGroup();listGroup.listDroup(new ArrayList<>(),Arrays.asList(1,2,3,4,5,6),2);// 其他边界条件测试省略}}

基础算法|Java递归算法练习相关推荐

  1. 【Java】——基础算法Java代码

    随学随更,方便复习 选择排序: package one;/*** @author 新时代好少年* @create 2022-07-08 8:02* 选择排序:时间复杂度O(n^2) 空间复杂度O(1) ...

  2. 计算机及网络应用基础思维导图_计算机基础/算法/面试题 PDF+思维导图下载

    之前为了面试,整理了九大应付面试的思维导图 + 一份 630 页的程序员内功修炼手册 + 一份计算机基础/算法/Java技术栈/Linux C++技术栈的资料.当时我就是靠着这份思维导图以及整理的 P ...

  3. Java的知识点18——数组存储表格数据、冒泡排序的基础算法、冒泡排序的优化算法、二分法查找

    数组存储表格数据 package cn.dym08; import java.util.Arrays; public class Test09 {public static void main(Str ...

  4. Java中对查出的数据计数_基础算法7:从数据库某个字段中取出现次数最多的几条数据形成“热门xxx”...

    在这里,我们需要查出所有的"出发城市"和"到达城市",并对每个城市进行计数根据其出现次数来取出几个出现次数最多的城市为热门城市 注:将多个字段的数据合并在一起并 ...

  5. java基础算法题(入门题与简单题)

    题目来自lintcode,答案来自九章算术,将自己在lintcode上训练的一些简单算法题贴出来,作为知识的总结与整理.便于查看复习. 第一部分(入门级别,只做了开放的部分,大部分需要收费的VIP才有 ...

  6. Java基础算法题(01):判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。

    查看所有50道基础算法题请看: Java的50道基础算法题 import java.util.ArrayList; import java.util.List; public class Detect ...

  7. Java基础算法题(02):古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

    查看所有50道基础算法题请看: Java的50道基础算法题 递归的方法 package Demo02Rabbits; import java.util.Scanner; public class Ra ...

  8. Java基础算法题(07):输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

    查看所有50道基础算法题请看: Java的50道基础算法题 package Demo07Character_Count; import java.util.Scanner; public class ...

  9. java算法:递归算法

    java算法:递归算法 递归算法时通过解决相同问题的一个或几个小例子来解决问题的算法.在java中,实现递归方法就是调用自身的方法. 例1:阶乘函数递归实现 Java代码 staticintfacto ...

  10. 数据结构与算法基础(java版)

    目录 数据结构与算法基础(java版) 1.1数据结构概述 1.2算法概述 2.1数组的基本使用 2.2 数组元素的添加 2.3数组元素的删除 2.4面向对象的数组 2.5查找算法之线性查找 2.6查 ...

最新文章

  1. 2021年中国工业互联网安全大赛核能行业赛道writeup之入门的黑客
  2. makefile经验笔记
  3. 云南昆明:看猪展迎猪年
  4. 【6 插值方法】实例实战篇
  5. boost::gil::bit_aligned_pixel_reference用法的测试程序
  6. 苹果字体怎么改_GoodNotes制作电子手帐之添加中文字体
  7. Java内存配太大导致fullgc_记一次因为短命大对象导致fullGC的问题
  8. java 获取子类实际的类型名_Java 泛型类 以及 泛型类获取子类的具体参数类型 以及 获取子类型具体参数的实例...
  9. java直接读取rar,Java无需解压直接读取Zip文件和文件内容
  10. python中函数startswith的用法_Python中用startswith()函数判断字符串开头的教程
  11. 帝国cms 6.6 采集入库多记录时出现空白 解决办法
  12. 网页如何截屏长图:f12 Ctrl+Shift+p cap
  13. linux编译so库
  14. 实对称矩阵可对角化证明
  15. 动词的过去式过去分词表
  16. CSS峰会圆桌论道丨共享产业数字化升级中的安全探索
  17. 并发编程入门(五):Java并发包和Java8并发
  18. 永恒之塔修改服务器名字,永恒之塔修改称号提升人物各种属性教程
  19. Redis服务入侵记
  20. c语言注释符号 井号,读c语言深度剖析 -- 符号 注释符号

热门文章

  1. web前端效率提升之浏览器与本地文件的映射-遁地龙卷风
  2. 数据库大作业预览-教室管理系统
  3. BT种子 磁力链接 是什么?
  4. 现在出纳记账手写还是用计算机,请问:出纳现金日记账和银行日记账是否一定要用手写归档能否用电脑打印归档?...
  5. 读书笔记:Sheldon Ross:概率论基础教程:随机变量
  6. 查看DLL中导出的函数及参数
  7. 可以检测手机帧率和温度的软件_手机帧数测试教学,含免费软件下载,使用方法,数据分析方法详解...
  8. 电话机器人源码支持独立部署+图文介绍
  9. refprop物性库_refprop 9.0 下载-refprop9.0 32/64位下载(NIST物性查询软件) 中文版 - 河东下载站...
  10. 公众号淘宝客自营商城外卖返利小程序淘宝客小程序流量主返利app