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. Jenkins实现自动打包,MAVEN打包,Shell脚本启动

    1.点击New任务 2.创建任务,输入项目名 3.输入描述等 4.选择Git或SVN 5.自动,定时打包 6.在Build下配置

  2. JS - 查找字符串中的某个值,截取其之前。和之后的值

    var str = "11:222"; /* *   截取 “ :”之前和之后的值 */document.write(str.split(':')[0])    //输出11doc ...

  3. 6 —— node —— 响应一个完整的页面

      const http = require('http'); const fs = require('fs'); const server = http.createServer(); server ...

  4. android导入项目build错误

    android studio apply script build.gradle 卡死 buildscript { repositories { maven{ url 'http://maven.al ...

  5. 如何在Windows系统下使用you-get下载网上的媒体资源

    关于you-get的专业介绍可以点击这个链接:中文说明 1,首先你要在你的电脑上安装python环境 Windows系统下: 首先,你需要去官网下载相应的版本: 也可以下载我网盘里的(注意看好自己的电 ...

  6. 通过GlobalAddAtom,GlobalGetAtomName方式发送字符串

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  7. vue全家桶router、vuex、axios

    main.js import Vue from 'vue' import App from './App' import router from './router' import store fro ...

  8. PGSQL基本操作语句

    ; --更新数据 ,,) ; --插入数据 ORDER BY app_name,flag asc/desc ; --查询数据并且排序 offset ; --查询起点0开始查询,返回5条数据 ORDER ...

  9. js对象等号赋值的bug

    var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x); console.log(b.x); 有道题是这样的,觉得很奇葩,分析一下 ...

  10. c语言寒假大作战

    一.表格 问题 回答 这个作业属于那个课程 2019级计科一班 这个作业要求在哪里 寒假大作战01 这个作业的目标是 gitee注册.登录.上传文件.克隆仓库与 git基础命令学习与使用 作业正文 作 ...