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; }
上一篇:
通过多线程提高代码的执行效率例子