数据结构与算法:手机上每个数字对应几个字母,给你一串数字,请你输出所有可能的字符串(树结构处理)
题目:手机上每个数字对应几个字母,给你一串数字,请你输出所有可能的字符串
?
?
?
?
package com.test;import java.util.ArrayList;import java.util.List;/** * @author jsczxy2 * */public class TestTelNumber {public static void main(String[] args) {String str = "154767";Node node = new Node(' ');char cs[] = str.toCharArray();for(char c : cs){addNodes(node,c);}order(node);}public static void order(Node node){//如果有子节点继续遍历子节点if(node.hasChildren()){List<Node> children = node.getChildren();for(Node nd : children){order(nd);}}else{//如果没有子节点也就是一次数字的完成,直接打印出该子节点一直到根节点的路径StringBuffer sb = new StringBuffer();Node me = node;while(true){if(me.getParent()!=null){sb.append(String.valueOf(me.getC()).trim());me = me.getParent();}else{break;}}System.out.println(sb.reverse().toString());}}public static void addNodes(Node node,char c){//没有子节点直接赋予子节点if(!node.hasChildren()){node.setChildren(createNodes(String.valueOf(c),node));}else{//有子节点遍历子节点继续递归每个子节点List<Node> children = node.getChildren();for(Node nd : children){addNodes(nd,c);}}}//根据number创建子节点public static List<Node> createNodes(String number,Node parent){List<Node> list = new ArrayList<Node>();if("0".equals(number)){list.add(new Node(' ',parent));}else if("1".equals(number)){list.add(new Node(' ',parent));}else if("2".equals(number)){list.add(new Node('a',parent));list.add(new Node('b',parent));list.add(new Node('c',parent));}else if("3".equals(number)){list.add(new Node('d',parent));list.add(new Node('e',parent));list.add(new Node('f',parent));}else if("4".equals(number)){list.add(new Node('g',parent));list.add(new Node('h',parent));list.add(new Node('i',parent));}else if ("5".equals(number)){ list.add(new Node('j',parent)); list.add(new Node('k',parent)); list.add(new Node('l',parent)); } else if ("6".equals(number)){ list.add(new Node('m',parent)); list.add(new Node('n',parent)); list.add(new Node('o',parent)); } else if ("7".equals(number)){ list.add(new Node('p',parent)); list.add(new Node('q',parent)); list.add(new Node('r',parent)); list.add(new Node('s',parent)); } else if ("8".equals(number)){ list.add(new Node('t',parent)); list.add(new Node('u',parent)); list.add(new Node('v',parent)); } else if ("9".equals(number)){ list.add(new Node('w',parent)); list.add(new Node('x',parent)); list.add(new Node('y',parent)); list.add(new Node('z',parent)); } return list;}}class Node{private char c;private List<Node> children = new ArrayList<Node>();private Node parent = null;public Node(char c) {this.c = c;}public Node(char c,Node parent) {this.c = c;this.parent = parent;}public char getC() {return c;}public void setC(char c) {this.c = c;}public List<Node> getChildren() {return children;}public void setChildren(List<Node> children) {this.children = children;}public Node getParent() {return parent;}public void setParent(Node parent) {this.parent = parent;}public boolean hasChildren(){return this.children.size()>0?true:false;}}