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