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 - 使 canvas 背景透明

    canvas = document.getElementById('canvas1'); var context = canvas.getContext('2d');context.fillStyle ...

  2. 三十四、在SAP的屏幕选择中,将英文替换成我们想要的文本内容

    一.我们在代码中定义了一个选择屏幕,但是对应的显示界面为英文 界面如下 二.我们选择[转到]-[文本元素] 三.默认的文本内容是问号和三个点 四.我们修改成我们需要的,并激活这个文本,如果不激活会丢失 ...

  3. Centos7安装rabbitMQ3.6.0

    文章中的erlang和rabbitmq3.6.0 http://pan.baidu.com/s/1c2Nn64w ​ Centos7 系统操作 cd /etc/yum.repos.d/ mv Cent ...

  4. JAVA中添加jar包

    右键点击工程文件,选择构建路径>添加外部归档.选择包的路径即可

  5. 吴裕雄--天生自然C++语言学习笔记:C++ 函数

    函数是一组一起执行一个任务的语句.每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数. 可以把代码划分到不同的函数中.如何划分代码到不同的函数中是由您 ...

  6. oracle获取排序第一的数据

    一:按照某字段排序(时间,总数等),获取第一条 select a.* FROM ( select * from ( select t.*,row_number() over(partition by ...

  7. vue使用Vant UI中的swiper组件及传值

    子组件SwiperBanner <!-- --> <template> <div class="swiper"> <van-swipe : ...

  8. Spring的数据源配置

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  9. Aduino Nano 技术性能指标

    纵览 在Adnuino Nano网站上节选了该控制器的价格等,在中国买非常便宜,我用10元左右的人民币就买到了这个产品,在Arduino网站上的价格是22美金,还不包括税.这种差别是如何造成的?是国外 ...

  10. Vulkan SDK 之 Instance

    上一篇 Vulkan SDK Demo 熟悉 粗略的了解了下,一个app是如何调用vulkan的api来展示一个立方体的,但是对其中的每一个api了解并不深刻,后面的系列会根据sample的tutor ...