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. HDU - 3724 Encoded Barcodes (字典树)

    题意:给定n个字符串和m个经过处理得到的字符串,问对于m个字符串中的每个字符串,n个字符串中以该字符串为前缀的个数.分析:1.误差在[0.95x, 1.05x],因此求8个数的平均数,大于平均数为1, ...

  2. 20170305深圳Meetup Rails中CSS,JS引用关系分析

    新手上路,若有错误请及时提醒 Rails中CSS,JS引用关系分析 一.Rails静态文件存放位置 二.Rails中CSS引用方式 三.Rails中JS引用方式与CSS类似 四.上面都是默认引用app ...

  3. cf 762C. Two strings

    因为要删去1个串(读错题),所以就直接二分搞就好了. 需要预处理出2个分别从头到尾,或从尾到头需要多长a串的数组,然后二分删去多长就好了. #include<bits/stdc++.h> ...

  4. Springboot跨域 ajax jsonp请求

    SpringBoot配置: <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  5. 安装完CUDA Toolkit,VS2010调试项目控制台一闪而过

    选择菜单栏的调试>>开始执行(不调试),就不一闪而过:

  6. HDU_4939 stupid tower defense 2014多校7 多变量型DP

    意思是有个塔防游戏,有三种塔,红塔在怪物经过的时候每秒会产生攻击力大小的伤害,绿塔对怪物经过以及经过之后每秒产生攻击力大小的伤害,还有种蓝塔,对怪物进行减速,即怪物从此之后经过一个单位都会减慢c秒 最 ...

  7. SpringMVC: JSON

    SpringMVC:JSON讲解 什么是JSON? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛. 采用完全独立于编 ...

  8. c++ auto_ptr笔记

    1.auto_ptr 不可以使用指针惯用的赋值初始化方式,只能直接初始化. 示例:  char *p = 'A';//error  auto_ptr<char>ptr = new char ...

  9. SourceTree - 对Git的使用

    SourceTree - 对Git的使用 一 .SourceTree简介 SourceTree 是 Windows 和Mac OS X 下免费的 Git 和 Hg 客户端,拥有可视化界面,容易上手操作 ...

  10. c#textBox控件限制只允许输入数字及小数点,是否为空

    c#textBox控件限制只允许输入数字及小数点 转载 //判断按键是不是要输入的类型. if (((int)e.KeyChar < 48 || (int)e.KeyChar > 57) ...