包含java递归实现无限插入子集的词条

本文目录一览:

递归实现java无限极菜单

说下我个人的做法吧,不考虑任何效率问题,我是在查询对象的时候,把对象用递归方法先封装成一个集合。就是第一次查的时候,会拿到根,然后就可以开始使用递归去把子类提出来,直到没有儿子。最后只需要把这个集合直接JSONArray 转成json字符串。丢到前台就行了。

java树级对象递归查找子集问题

package com.demo.dept;

/**

 * @author dongbin.yu

 * @from 2016-05-06

 * @since V1.0

 */

public class Dept {

    private int id;

    private String name;

    private int parentId;

    public int getId() {

        return id;

    }

    public void setId(int id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getParentId() {

        return parentId;

    }

    public void setParentId(int parentId) {

        this.parentId = parentId;

    }

    public Dept(int id, String name, int parentId) {

        this.id = id;

        this.name = name;

        this.parentId = parentId;

    }

}

package com.demo.dept;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

 * @author dongbin.yu

 * @from 2016-05-06

 * @since V1.0

 */

public class DeptTest {

    private static ListDept depts = new ArrayList();

    static{

        depts.add(new Dept(1,”部门1″,0));

        depts.add(new Dept(2,”部门2″,1));

        depts.add(new Dept(3,”部门3″,1));

        depts.add(new Dept(4,”部门4″,1));

        depts.add(new Dept(5,”部门5″,2));

        depts.add(new Dept(6,”部门6″,3));

        depts.add(new Dept(7,”部门7″,2));

        depts.add(new Dept(8,”部门8″,2));

        depts.add(new Dept(9,”部门9″,1));

        depts.add(new Dept(10,”部门10″,5));

    }

    public static void main(String[] args) {

        MapInteger, ListInteger deptMap = new HashMap();

        for (Dept dept : depts) {

            deptMap.put(dept.getId(),getChildDept(dept.getId()));

        }

        System.out.println(deptMap);

    }

    private static ListInteger getChildDept(int id){

        ListInteger ids = new ArrayList();

        for (Dept dept : depts) {

            if(dept.getParentId() == id){

                //添加第一次父id符合的

                ids.add(dept.getId());

                //添加嵌套父id符合的

                ids.addAll(getChildDept(dept.getId()));

            }

        }

                Collections.sort(ids);

        return ids;

    }

}

用java递归方法实现

1、递归做为一种算法在程序设计语言中广泛使用,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。

2、递归算法一般用于解决三类问题:

1)数据的定义是按递归定义的。(Fibonacci(斐波那契)的函数)

2)问题解法按递归算法实现。(回溯)

3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)

JAVA题目:Java题目:用递归写n个元素的子集 static Object[] subs(Object[] chosen, int i, int n)

递归问题都是千篇一律的,将问题分为n类,每一类问题又可以分为n类。

这个问题中,设a为集合,将所有子集合分为两类,有a[0]的和没a[0]的。

有a[0]的分为两类,有a[1]的和没a[1]的。

。。。

有a[n-2]的分为两类,有a[n-1]的和没a[n-1]的。

有a[n-1]的直接返回[a[n-1]]。

没a[n-1]的直接返回[]。

subs(chosen,i,n){//subs为全部集合,chosen为数组,i为数组索引,从1开始,n为数组长度

if(i1){return;}

if(i==n){//当i为n时,也就是扫描完数组了。

if(!chosen)//如果数组为空,也就是没有chosen[n-1]的情况

return [];//返回空数组

}else{

return [chosen[i-1]];//否则为有a[n-1]的情况

}

arr1=subs(delete_arr_index(chosen,i-1),i+1,n);//没chosen[i-1]的情况,当i=1时,也就是求得没有a[0]的所有集合。

arr2=subs(chosen,i+1,n);//有chosen[i-1]的情况,当i=1时,也就是求得有a[0]的所有集合。

arr=arr1+arr2//合并数组,当i=1时,就是获得了全部集合。

return arr;

}

//删除数组中的某个元素

public static void delete_arr_index(str,index) {

//删除php

Listint list = new ArrayListint();

for (int i=0; istr.length; i++) {

list.add(str[i]);

}

list.remove(index);

int[] newStr = list.toArray(new int[1]);

reuturn newStr;

}

在JAVA中什么是递归?有什么用?

Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。

JAVA递归找所有子集

package web;

import java.util.ArrayList;

public class SubsetGenerator

{

int[] indexs = null;

int COUNT = 1;// choose how many to be combination

ArrayListString list = new ArrayListString ();

private String subsets;

public SubsetGenerator( String subsets )

{

this.subsets = subsets;

}

public ArrayListString getSubsets ( int… params )

{

if(params.length == 0)

{

indexs = new int[subsets.length ()];

params = new int[2];

params[0] = 0;

params[1] = -1;

list.add (“”);

}

params[1]++;

if(params[1]  COUNT – 1)

{

return list;

}

for( indexs[params[1]] = params[0]; indexs[params[1]]  subsets.length (); indexs[params[1]]++ )

{

getSubsets (indexs[params[1]] + 1, params[1]);

if(params[1] == COUNT – 1)

{

String temp = “”;

for( int i = COUNT – 1; i = 0; i– )

{

temp += subsets.charAt (indexs[params[1] – i]);

}

list.add (temp);

}

}

if(COUNT  subsets.length ()  params[0] == 0)

{

COUNT++;

getSubsets (0, -1);

}

return list;

}

}

package web;

import java.util.ArrayList;

import java.util.Collections;

public class SubsetGeneratorTester

{

public static void main ( String[] args )

{

SubsetGenerator generator = new SubsetGenerator (“rum”);

ArrayListString subsets = generator.getSubsets ();

Collections.sort (subsets);

if(!”[, m, r, rm, ru, rum, u, um]”.equals (subsets.toString ()))

{

System.err.println (“Expected: [, m, r, rm, ru, rum, u, um]”);

}

else

{

System.err.println (“Congratulations !”);

System.out.println (“Your result is: ” + subsets);

}

}

}

原创文章,作者:UFSA,如若转载,请注明出处:https://www.506064.com/n/142210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
UFSAUFSA
上一篇 2024-10-10 09:25
下一篇 2024-10-10 09:25

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论