java---数位dp---计数问题

题目:

给定两个整数 a 和 b,求 a 和 b 之间的所有数字中 0∼9 的出现次数 例如,a=1024,b=1032,则 a 和 b 之间共有 9 个数如下

1024 1025 1026 1027 1028 1029 1030 1031 1032

其中 0 出现 10 次,1 出现 10 次,2 出现 7 次,3 出现 3 次等等… 思路:统计每个值中数字出现的次数 代码

public void test() {
          
   
 		//第一个数
        int startNum = 0;
        //最后一个数
        int endNum = 100;
        Map<Integer, Integer> numCountMap = this.getNumCount();
        for (int i = startNum; i <= endNum; i++) {
          
   
        	//0-9单独计算
            if (i < 10) {
          
   
                numCountMap.replace(i, numCountMap.get(i) + 1);
            } else {
          
   
                numCountMap = calculation(i, numCountMap);
            }
        }
        System.out.println(numCountMap);
    }
/**
 * 计数初始化
 * @return
 */
public Map<Integer, Integer> getNumCount() {
          
   
    HashMap<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < 10; i++) {
          
   
        map.put(i, 0);
    }
    return map;
}
/**
     *
     * @param value 要统计的值
     * @param numCountMap 计数
     * @return
     */
    public Map<Integer, Integer> calculation(int value, Map<Integer, Integer> numCountMap) {
          
   
        //取余
        int remainder = value % 10;
        numCountMap.replace(remainder, numCountMap.get(remainder) + 1);
        //除10
        int division = value / 10;
        if (division > 9) {
          
   
            numCountMap = calculation(division, numCountMap);
        } else {
          
   
            numCountMap.replace(division, numCountMap.get(division) + 1);

        }

        return numCountMap;
    }
经验分享 程序员 微信小程序 职场和发展