`
jsczxy2
  • 浏览: 1278478 次
  • 性别: Icon_minigender_1
  • 来自: 常州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

 

 

 

 

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;
	}
}
分享到:
评论

相关推荐

    统计字符串中数字的个数

    本实验的主要目的是设计并实现一个程序,用于统计一个特定字符串中所有数字的出现次数,并按照数字从小到大的顺序输出这些数字及其出现次数。 #### 输入格式 - **Input**:输入只有一行,即一个包含各种字符(包括...

    数据结构哈弗曼压缩课设

    1. ASCII码:ASCII码(American Standard Code for Information Interchange)是计算机中字符的一种标准编码方式,包括数字、字母和符号,每个字符都有一个7位的二进制数与之对应。 2. 哈夫曼树:哈夫曼树(Huffman...

    字符串字典序排序软件

    在ASCII码表中,每个字符都有一个对应的数字,比如'a'是97,'b'是98,依此类推。当比较两个字符串时,我们从左到右逐个比较字符,如果在某个位置上一个字符串的字符在另一个字符串之前,那么这个字符串就排在前面。...

    数字+大写字母验证码数据集

    在这个特定的数据集中,包含的样本很可能是大量的数字和大写字母组合的图像,每个图像代表一个验证码。这些图像可能有不同的尺寸、颜色、噪声和旋转,以模拟实际网络环境中可能出现的各种情况。训练一个模型来识别这...

    数据结构与算法基础课程 C语言C++程序语言设计教程 4_1串 共18页.pptx

    每个`ai`可以是字母、数字或其他字符。 2. **串的长度**:串中字符的个数称为串的长度。 3. **子串与主串**: - 子串:串中任意个连续的字符所组成的子序列。 - 主串:包含子串的串称为主串。 4. **位置**:字符在...

    16进制字符串显示图片工具

    16进制字符串是由0到9的数字和A到F的字母组成的,每个字符代表4位二进制,因此每两个16进制字符可以表示一个字节。在图像处理中,图片通常以二进制数据的形式存储,这些二进制数据可以通过16进制字符串来展示和解析...

    汽车牌照的排序与查找问题-数据结构与算法课程设计报告

    《汽车牌照的排序与查找问题-数据结构与算法课程设计报告》主要探讨的是如何通过数据结构和算法解决汽车牌照的排序和查找问题。在汽车牌照中,信息通常包含汉字、字母和数字,需要针对这种多关键字的情况设计有效的...

    汉字的首字母生成算法

    此算法的核心在于对输入的汉字串进行逐字符解析,并基于每个汉字对应的拼音首字母来构建一个简短的字符串作为最终的助词码。 #### 参数与返回值 - **参数**:该算法接受一个名为 `ss` 的字符串参数,代表需要生成...

    算法分析与设计程序源代码

    - **数据结构**: 使用了数组来存储各个数字对应的英文单词,方便查找和输出。 - **算法思想**: 将数字分解为各位数字,再逐个转换成英文单词。 ### 3. 字符串相乘 第三个示例程序实现了两个字符串表示的大整数之间...

    浙江师范大学《数据结构与算法分析》2006期末试卷

    ### 浙江师范大学《数据结构与算法分析》2006期末试卷知识点解析 #### 一、单项选择题解析 1. **数据结构的二元组定义** - **题目内容**:DS={D,S}中,D是数据元素的有限集合,而S是D上_______的有限集合。 - **...

    c语言作业题

    - **解析**: 这道题需要学生能够将三位整数转换为字符串形式,再分别取出每个字符进行数字运算。涉及到字符串处理函数如`itoa`或者字符数组的使用,以及字符与数字之间的相互转换。 **E05. 字符数据** - **知识点**...

    python-leetcode面试题解之第249题移位字符串分组.zip

    题目249通常会要求我们对一组字符串进行操作,这些字符串由小写字母组成,且每个字符串都可以看作是在原字符串基础上向右移动了某个固定的步数(移位)。目标可能是将这些字符串根据它们的移位情况进行分组,使得同...

    数据结构算法课程设计-汽车牌照的排序与查找问题

    在这个数据结构算法课程设计中,主要探讨的问题是汽车牌照的排序与查找,这是一个涉及数据结构和算法的实际应用问题。在汽车牌照的排序中,通常会遇到多关键字排序的情况,因为车牌号通常包含汉字、字母和数字,这些...

    数据结构中的 串 章节详细讲述

    在计算机科学中,数据结构是组织和管理数据的重要工具,串(String)是其中一种基本的数据类型,尤其在文本处理、编程语言解析等领域扮演着关键角色。本章详细讲述了串的相关概念、表示方法以及模式匹配算法。 首先...

    统计英文文章字母

    这个程序的实现可以作为学习C++编程、字符串操作、数据结构以及算法的一个实践项目。它也涉及到了文本预处理的概念,这是自然语言处理(NLP)中的重要步骤。通过对英文文章的字母统计,我们可以观察到语言的规律,...

    上海电机学院C语言实训答案

    (5)编写一个程序实现如下功能:从键盘输入字符(最多为80个),遇到回车键输入结束,将输入的字符串按奇偶位置拆分,奇数位上的字符在前,偶数位上的字符在后,重新组成新的字符串输出,例如输入: ab12cd3456fg,...

    易语言取所有首拼音字母

    "取所有首拼音字母"是易语言中一个常见的功能,主要用于从汉字字符串中提取每个汉字的首拼音字母,这对于中文信息处理、搜索关键词提取、中文排序等方面都有重要的应用。 在易语言中实现“取所有首拼音字母”的过程...

    2014c语言必做题

    - 数字处理:通过除法和取模运算获取各个位上的数字,以及通过字符串操作实现数字的逆序输出。 - **E13. 数字排序** - 描述:从键盘输入任意3个整数,按从小到大的顺序输出。 - 关键知识点: - 输入输出操作:...

    c算法经典例题

    - **实现思路**:首先需要一个月份对应的天数表,然后累加每个月的天数直到当前月份,再加上当月的天数即可。 #### 知识点五:按顺序输出三个数 - **核心概念**:排序算法的基础知识。 - **实现思路**:最简单的...

    数据结构串的应用.docx

    在计算机科学中,“串”是一种基本的数据结构,用于表示一串字符序列。它广泛应用于文本处理、字符串搜索、密码学等多个领域。 #### 2. 设计算法来修改串 **算法一:删除指定位置的连续字符** - **功能描述**:...

Global site tag (gtag.js) - Google Analytics