首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

数据结构与算法:手机下每个数字对应几个字母,给你一串数字,请你输出所有可能的字符串(树结构处理)

2012-10-07 
数据结构与算法:手机上每个数字对应几个字母,给你一串数字,请你输出所有可能的字符串(树结构处理)题目:手

数据结构与算法:手机上每个数字对应几个字母,给你一串数字,请你输出所有可能的字符串(树结构处理)

题目:手机上每个数字对应几个字母,给你一串数字,请你输出所有可能的字符串

?

?

?

?

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;}}

热点排行