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. 51nod 1208 && POJ 2482:Stars in Your Window

    1208 Stars in Your Window 题目来源: Poj 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  取消关注 整点上有N颗星星,每颗 ...

  2. POJ 1330:Nearest Common Ancestors

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20940   Accept ...

  3. 云时代架构阅读笔记一——Java性能优化(一)

    Java语言学习了这么长时间之后,自己对于Java编程的一些细节还是稍微有点总结,正好根据云时代架构中<Java高级开发必会的50个性能优化的细节(珍藏版)>来叙述一些我和里面的点比较相符 ...

  4. eclipse中使用jstl

    错误提示为"can not find the tag library for http://java.sun.com/jsp/jstl/core" 这是我在练习把axis2和普通j ...

  5. Android Studio真机调试安装以后打开闪退,打包APK再安装正常打开没有问题

    一直真机调试都没有问题, 但是有一次开始,真机调试正常安装没有问题,但是一打开就崩溃了一眨眼间就像被光闪了一下的那种. oppoR11调试会这样,但是用魅族试过没有问题, 报错出现过Android S ...

  6. 错误:selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities

    错误再现 原因:firefox浏览器版本和浏览器驱动版本不匹配 解决办法:卸载高版本浏览器,安装低版本浏览器

  7. (java) webdriver 启动firefox driver时,加载firebug的扩展

    去网上下载一个firebug.xpi(对应版本, 我的ff是17,可以使用firebug-1.11.4.xpi,最好使用非firefox浏览器下载,不然提示你直接安装到firefox) @Before ...

  8. 环境变量和文件查找&文件打包与解压缩

    环境变量和文件查找 介绍环境变量的作用与用法 及几种搜索文件的方法 学会这些技巧可以高效地使用 Linux 知识点:环境变量的设置 环境变量的修改 环境变量 要解释环境变量,得先明白变量是什么,准确的 ...

  9. MFC消息映射及消息处理函数原型

    MFC把消息主要分为三大类: 1. 标准Windows消息(WM_XXX) 2. 命令消息(WM_COMMAND):凡由UI对象产生的消息都是这种命令消息,可能来自菜单或加速键或工具栏按钮. 3. 控 ...

  10. php base64编码图片上传七牛

    上网上找了好几个例子 都是自己写curl上传 感觉七牛这么多年了不应该sdk不提供一个方法 然后试 试 试 显示put 方式 上传上去 就是个字符串 后来换成文件上传方法 putFile 成了 不废话 ...