L1-003 个位数统计

1. 题目描述:

给定一个 k 位整数 N=dk−1​10k−1+⋯+d1​101+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)

若还有更好的题解欢迎与我交流哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lilianac

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值