当前位置:网站首页>计算数字区间中数字出现次数
计算数字区间中数字出现次数
2022-08-10 05:36:00 【yeah_you_are】
问题描述
输入两个数n,x(x<=n),找到[x,n]之间数字x出现的次数,只统计数字出现的次数,不需要考虑数字是在个位、十位、百位等位置,将统计结果返回。
比如:n=11,x=1,返回结果4。
1出现1一次,10出现1一次,11出现1两次,所以结果为4。
代码及解析
public int solution(int n,int x) {
int result = 0;
//遍历x到n的所有数字
for (int i=x;i<=n;i++) {
int num = i;
//得到数字的长度
int j = String.valueOf(num).length();
//循环得到数字的各个位上的数值
for (;j>0;j--) {
int p = new Double(Math.pow(10, j-1)).intValue();
//得到各个位上的数字
int b = num / p;
//数字比较
if (b == x) result ++;
//取余重新赋值
num = num % p;
}
}
return result;
}
思考:
其实按照问题给的示例数值11和1去编写处理逻辑会留下一个坑,就是编写代码时很容易给输入的x做了一个默认假设,默认x的长度只有1,只考虑了n的长度变化而忽略了x的长度变化,上面的代码就是只处理了x为一位数的情况,当x为两位数或者三位数时则无法适用,所以需要改进。
改进后:
public int solution(int n, int x) {
int result = 0;
//转换为目标字符串
String goal = String.valueOf(x);
//得到其数字的长度
int len = goal.length();
//遍历x到n的所有数字
for (int i=x;i<=n;i++) {
String num = String.valueOf(i);
//循环分割字符串
for (int j = 0;j <= num.length() - len;j++) {
//得到连续的定长字符串
String sub = num.substring(j, j + len);
//与目标字符串比较
if (goal.equals(sub)) result++;
}
}
return result;
}
测试输入:n=120,x=11,结果:12
11是一次,110到119出现11总共11次,其中111出现2次,所以结果为12。
改进后,将数字问题改为了字符串匹配问题,将数字做定长切割得到待比较的字符串,然后与目标字符串比较即可。这里需要注意的就是循环的限制条件,也就是边界限定问题。
边栏推荐
猜你喜欢
随机推荐
【从零设计 LaTex 模板】1. 一些基础知识
详解 Hough 变换(下)圆形检测
样条曲线(下)之插值问题(贝塞尔曲线、B样条和一般样条曲线插值)
PyTorch之CV
STM32F407ZG TIM通用定时器
Multisim软件的基本使用
PyTorch的安装与基础知识
二维卷积定理的验证(下,cv2.filter2D())
pytorch-10. Convolutional Neural Networks (homework)
Unity中Xml简介以及通过脚本读取Xml文本中的内容
AR Foundation Editor Remote插件使用方法
【简易笔记】PyTorch官方教程简易笔记 EP4
电池级碳酸锂除杂质钙镁离子工艺原理
常用模块封装-pymysql、pymongo(可优化)
自定义View的流程总结学习
以STM32F103C6T6为例通过配置CubeMX实现EXIT外部中断
Machine Learning - Clustering - Shopping Mall Customer Clustering
【fiddler3】使用fiddler设置弱网模式
Linux的文件IO与标准IO,以及IO缓存
mysql分组排序并取各分组前几个数据









