import com.google.common.collect.Lists;
import org.springframework.cglib.beans.BeanCopier; import java.util.*;
import java.util.stream.Collectors;
public class tset {
private static Map<String, List<String>> map = new HashMap<>(); static {
map.put("2", Lists.newArrayList("A", "B", "C"));
map.put("3", Lists.newArrayList("D", "E", "F"));
map.put("4", Lists.newArrayList("G", "H", "I"));
map.put("5", Lists.newArrayList("J", "K", "L"));
map.put("6", Lists.newArrayList("M", "N", "O"));
map.put("7", Lists.newArrayList("P", "Q", "R", "S"));
map.put("8", Lists.newArrayList("T", "U", "V"));
map.put("9", Lists.newArrayList("W", "X", "Y", "Z"));
} public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Map<String, List<Node>> nodeMap;
while (true) {
nodeMap = new HashMap<>();
String num = scanner.next();
char[] chars = num.toCharArray();
LinkedList<Node> list = new LinkedList<>();
if (chars.length == 1) {
list.addAll(map.get(String.valueOf(chars[0])).stream().map(Node::new).collect(Collectors.toList()));
} else {
for (int i = 0; i < chars.length - 1; i++) {
char aChar = chars[i];
List<Node> collect0 = nodeMap.computeIfAbsent(String.valueOf(aChar), a -> map.get(String.valueOf(aChar)).stream().map(Node::new).collect(Collectors.toList()));
if (i == 0) {
list.addAll(collect0);
}
List<Node> collect = map.get(String.valueOf(chars[i + 1])).stream().map(Node::new).collect(Collectors.toList());
nodeMap.put(String.valueOf(chars[i + 1]), collect);
for (Node node : collect0) {
node.children = collect;
}
}
}
String name;
String preName;
List<String> result = new ArrayList<>();
while (!list.isEmpty()) {
Node node = list.removeFirst();
name = node.name;
preName = node.preName != null ? node.preName + name : name;
if (node.children != null) {
for (Node node1 : node.children) {
Node newNode = new Node();
BeanCopier beanCopier = BeanCopier.create(node1.getClass(), newNode.getClass(), false);
beanCopier.copy(node1, newNode, null);
newNode.preName = preName;
if (newNode.children != null) {
list.add(newNode);
} else {
result.add(preName + newNode.name);
}
}
} else {
result.add(name);
}
}
System.out.println(result);
} } public static class Node {
String name;
String preName;
List<Node> children; Node() {
} Node(String name) {
this.name = name;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPreName() {
return preName;
} public void setPreName(String preName) {
this.preName = preName;
} public List<Node> getChildren() {
return children;
} public void setChildren(List<Node> children) {
this.children = children;
}
} }

  

java 实现递归实现tree(2)的更多相关文章

  1. java 实现递归实现tree

    package app.util; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSO ...

  2. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

  3. java 中递归的实现 以及利用递归方法实现汉诺塔

    今天说下java语言中比较常见的一种方法,递归方法. 递归的定义 简单来说递归的方法就是"自己调用自己",通过递归方法往往可以将一个大问题简单化,最终压缩到一个易于处理的程度.对于 ...

  4. Java 之递归删除目录

    Java 之递归删除目录 一.思想 必须从最里层的文件开始删除,使用递归删除. 二.源代码:RecursiveDeleteDirectory.java package cn.com.zfc.day01 ...

  5. Java 之递归遍历目录

    Java 之递归遍历目录 一.内容 输出指定目录(文件夹)下的所有文件(包括目录)的绝对路径 二.源代码:RecursiveListDirectory.java package cn.com.zfc. ...

  6. Java实现递归将嵌套Map里的字段名由驼峰转为下划线

    摘要: 使用Java语言递归地将Map里的字段名由驼峰转下划线.通过此例可以学习如何递归地解析任意嵌套的List-Map容器结构. 难度:初级 概述 在进行多语言混合编程时,由于编程规范的不同, 有时 ...

  7. Java面向对象-递归

    Java面向对象-递归 递归,就是程序调用自身,我们讲的是方法递归调用,也就是在方法里自己调用自己: 我们给出一个案例,求阶乘  1*2*3*...*(n-1)*n 我们用非递归和递归方式分别实现下, ...

  8. java方法---递归

    java方法递归 1.什么是递归 就是自己调用自己: 2.递归结构的两个部分 递归头:什么时候不调用自身方法.如果仅有头,将陷入死循环.递归体:什么时候需要调用自身方法.

  9. JAVA二叉树递归构造、二叉树普通遍历及递归遍历

    二叉树类: package com.antis.tree; public class BinaryTree { int data; //根节点数据 BinaryTree left; //左子树 Bin ...

随机推荐

  1. JS - n次方计算

    pow 方法返回底表达式的指定次幂. Math.pow(base, exponent)  参数base 必选项.表达式底的值. exponent 必选项.表达式的指数值.

  2. 破解centos7 密码

    1.在CentOS7的启动选项,按“e”选择编辑启动选项2.进入下图画面,点下箭头直到看到“linux162174542514”,按end键跳到行尾3.在行尾加上“rd.break”,并敲击键盘“ct ...

  3. SQL decode 函数的用法

    decode 函数基本语法: decode(字段|表达式,条件1,结果1,条件2,结果2,...,条件n,结果n,缺省值): --缺省值可以省略 表示如果 字段|表达式 等于 条件1 时,DECODE ...

  4. 实验吧-密码学-try them all(加salt的密码)、robomunication(摩斯电码)、The Flash-14(闪电侠14集)

    try them all(加salt的密码) 首先,要了解什么事加salt的密码. 加salt是一种密码安全保护措施,就是你输入密码,系统随机生成一个salt值,然后对密码+salt进行哈希散列得到加 ...

  5. python刷LeetCode:28. 实现 strStr()

    难度等级:简单 题目描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 ( ...

  6. 小程序实现textarea行数自动增加

    查找网上案例很多,但是都不是很满意,参考大牛案例终结了一下,话不多说代码如下: 实现效果: 前段代码 <view class="text-box"> <view& ...

  7. git 公钥 ssh

    1 安装 git 2 桌面右击  Git Bash Here 3 命令: git config --global user.name "git账户" git config --gl ...

  8. 驰骋BPM系统-表单引擎-流程引擎 2020年大换装

      关键字:驰骋表单引擎,流程引擎,界面升级. 前言概述: 感谢美工与同事们的辛苦工作,ccbpm新年大换装,迎接爱好着,为这阴霾多日的疫情气愤增添一笔光彩. 本次的色系以浅灰色为主,因为ccbpm大 ...

  9. Ajax校验用户名是否可用

    准备 导包:DBUtil,JDBC,C3P0 在src下导入c3p0-config.xml 导入JDBCUtil 创建数据库 第2.3.条查看https://blog.csdn.net/weixin_ ...

  10. hash表系列(转)

    http://www.cnblogs.com/mumuxinfei/p/4441826.html 前言: 我以前在百度的mentor, 在面试时特喜欢考察哈希表. 那时的我满是疑惑和不解, 觉得这东西 ...