1. 题目描述:
给定一个 k 位整数 N=dk−110k−1+⋯+d1101+d0 (0≤di≤9, i=0,⋯,k−1, dk−1>0),请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M
的格式在一行中输出该位数字 D
及其在 N 中出现的次数 M
。要求按 D
的升序输出。
输入样例:
100311
输出样例:
0:2
1:3
3:1
2. 思路讲解
数字计数问题一开始就是想到需要用容器装起来,然后计算不同的数字出现的个数,然后看到需要排序输出,于是就想到了HashMap,HashMap底层就有排序的算法,所以我们需要做的就是将数字放入HashMap并计数然后输出即可
3. 代码:
import java.io.*;
import java.util.*;
public class 个位数统计 {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
//输入数字
String n = bf.readLine();
HashMap<Character,Integer> hashMap = new HashMap<>(10);
//将输入数字中所含的数字放入HashMap中并计算个数
for(int i=0;i<n.length();i++){
if(!hashMap.containsKey(n.charAt(i))){
hashMap.put(n.charAt(i),1);
}else{
int count = hashMap.get(n.charAt(i));
hashMap.put(n.charAt(i),count+1);
}
}
//遍历HashMap
for (Character c : hashMap.keySet()) {
System.out.println(c + ":" + hashMap.get(c));
}
}
}
获得输入的数据之后首先判断HashMap中是否含有这个数字,如果没有,则将该数字作为键,1作为值放入HashMap中,若有此键,则更新此键对应的值, 更新HashMap中value值只需要再次使用put()方法,在原来的value值上加1即可,最后输出使用循环遍历,keySet()方法可以获得HashMap中所包含的所有键, 使用get()方法可以获得键所对应的值,输出即可.
4. 算法与时间复杂度
时间复杂度: O(n)