JAVA:基础递归算法大杂烩
递归思想:
从最外部到达最里部,从最里部开始解决问题,直到解决完最外部的问题。
案例1:
求ABCDE的所有排序
public class Main {public static void main(String[] args) {char[] data = "ABCDE".toCharArray();digui(data, 0);}private static void digui(char[] data, int curData) {if (curData == data.length) {for (int i = 0; i < data.length; i++)System.out.print(data[i]);System.out.println();}for (int i = curData; i < data.length; i++) {{char temp = data[curData];data[curData] = data[i];data[i] = temp;}digui(data, curData + 1);{char temp = data[curData];data[curData] = data[i];data[i] = temp;}}}}
案例2
求出两个字符串共同最大子集的长度
public class Main {public static void main(String[] args) {int num=digui("acabczdd","abcsf");System.out.println(num);}private static int digui(String s1, String s2) {if(s1.length()==0||s2.length()==0) return 0;if(s1.charAt(0)==s2.charAt(0))return digui(s1.substring(1), s2.substring(1))+1;elsereturn Math.max(digui(s1.substring(1),s2 ), digui(s1, s2.substring(1)));}}
案例3:
使用递归打印杨辉三角形
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();for (int i = 0; i < n; i++) {for (int j = 0; j <= i; j++) {System.out.print(digui(i, j) + " ");}System.out.println();}}private static int digui(int m, int n) {if (n == 0)return 1;if (m == n)return 1;return digui(m - 1, n) + digui(m - 1, n - 1);}}
案例4
现在有3个红球,2个白球,它们有多少种排列方式
public class Main {public static void main(String[] args) {System.out.println(digui(3,2));}private static int digui(int m, int n) {if(m==0||n==0) return 1;return digui(m-1,n)+digui(m,n-1);}}
案例5
给出一个数字,将这个数字的所有和的表现形式展示出来
输出案例:
7=7
7=6+1
7=5+2
7=5+1+1
7=4+3
7=4+2+1
7=4+1+1+1
7=3+3+1
7=3+2+2
7=3+2+1+1
7=3+1+1+1+1
7=2+2+2+1
7=2+2+1+1+1
7=2+1+1+1+1+1
7=1+1+1+1+1+1+1
public class Main {public static int num;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();num = n;int[] a = new int[100];digui(n, a, 0);}private static void digui(int n, int[] a, int k) {if (n <= 0) {System.out.print(num + "=");for (int i = 0; i < k; i++) {if (i == k - 1) {System.out.print(a[i]);} else {System.out.print(a[i] + "+");}}System.out.println();return;}for (int i = n; i > 0; i--) {if (k > 0 && i > a[k - 1])continue;a[k] = i;digui(n - i, a, k + 1);}}}
JAVA:基础递归算法大杂烩相关推荐
- Java基础篇(03):流程控制语句,和算法应用
本文源码:GitHub·点这里 || GitEE·点这里 一.分支语句 流程控制语句对任何一门编程语言都是非常重要的,Java中基于流程控制程序执行的不同步骤和代码块. 1.IF条件 IF条件语句会根 ...
- Java基础知识(一),打好基础才能写出高质量代码
前沿:不管工作多久,基础永远是最重要的,好多大厂看的就是基础好不好,所以写代码的同时,基础知识还是要去理解和记忆的,坚持每天来看一点 Java基础.语法: java面向对象的特征有哪些方面? 1.抽象 ...
- Java基础——狂神说
Java基础--狂神说 文章目录 Java基础--狂神说 一.第一章--基础语法 1.标识符 2.变量.数据类型.常量 2.1.变量的分类 2.1.1.按数据类型分类 2.1.1.1.浮点类型 2.1 ...
- java语言基础总结ppt_我的java基础知识总结ppt
昨天加上今天,我把java基础知识总结的ppt做好了,其中包括: 1基础阶段所有项目展示 2.阶段自我总结,自己的提升和不足 3.后期学习规划 我在ppt里面把几个有代表性项目展示了出来,并且描述了我 ...
- Java 基础巩固:再谈抽象类和接口
文章出自:安卓进阶学习指南 主要贡献者: Milo Struggle shixinzhang 读完本文你将了解: 背景介绍 什么是抽象类和接口 特点与区别 抽象类的特点 接口的特点 栗子 小结 如何选 ...
- java基础技能清单
一.java基础 1.java集合框架学习,数据基本类型学习,Integer缓存等问题,常见面试题.对ArrayList和Collecttion.binarySerch()源码进行学习.DelayQu ...
- Java基础之扩展特性
Java基础之扩展特性 一.泛型 二.包装类 三.递归算法 四.异常处理 五.自定义异常 六.常用类 七.String 的正则表达式 八.Java 和 C++的区别 九.TCP/IP 初识 十.Soc ...
- 1 Java基础后端-基础语法
1 Java基础后端-基础语法 编程语言介绍 java介绍 文章目录 1 Java基础后端-基础语法 1.1. 计算机语音发展 1.2. Java和C比较 1.3. windows常用DOS 1.4. ...
- 【狂神说笔记——Java基础03-方法】
Java基础03-方法 方法 1.何谓方法? 在前面几个章节中我们经常使用到 System.out.println(),那么它是什么呢? println() 是一个方法. System 是系统类. o ...
最新文章
- Ubuntu中的minicom
- linux的strace命令
- 点云数据的类型主要分为_点云学习在自动驾驶中的研究概述
- vue 输入框限制3位小数_vue+element 中 el-input框 限制 只能输入数字及几位小数(自定义)和输入框之键盘...
- allgro显示网络名称_相同的4G网络,为什么你的网速总是慢?知道这3点原因,网速翻倍...
- python 类组合_python类与对象的组合与继承
- springboot 默认异常处理
- Python 输出HTML实体字符(#x***转html,html符号乱码,中文乱码)
- Spring Security构建Rest服务-0600-SpringSecurity基本原理
- 集成学习—GBDT原理理解
- 如何将 Redis 的内存优化?
- python能做什么游戏-Python有做大型游戏的潜力吗?
- getWriter() has already been called for this response
- [SNMP超详解]:简介、抓包分析与编程实战
- 关于公司备份软件选型
- 很酷的瞄准镜样式光标效果
- linux系统怎么取消下载,Linux系统怎么彻底删除文件
- 基于Android的短信应用开发(六)——将发出短信存至数据库
- Ubuntu Linux 查看、编辑、比较二进制文件
- 子网掩码与prefixLength长度的互相转换