剑指 offer代码解析——面试题32统计1到n中1出现的次数
时间:2022-05-03
本文章向大家介绍剑指 offer代码解析——面试题32统计1到n中1出现的次数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本题的分析过程均在代码注释中:
/**
* 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
* @author 大闲人柴毛毛
* @date 2016年3月22日
*/
public class CountOne {
/**
* 分析:本题常规思路如下:
* 从1开始遍历这n个数,分别统计每个数中“1”出现的次数。
* 那么,问题就转化为“如何统计一个整数中1出现的次数?”
*
* 首先我们需要知道以下结论:
* 1.设整数为n,则n%10就能取到n的个位数;
* 2.n除以10后再取整其实就是把n的个位数砍掉。
* 基于上述结论,我们只要循环以下操作即可:
* 1.求整数n的余数;
* 2.判断余数是否为1,若为1则将计数器加1;
* 3.重复上述过程,直到n变成为0为止。
* 代码如下:
*/
/**
* 统计1-n中“1”出现的次数
* @param n
* @return 返回1出现的次数(若返回-1表示程序出错)
*/
public static int countOne(int n){
//若n<1
if(n<1){
System.out.println("n<1!");
return -1;
}
//创建计数器,用于统计1的个数
int count = 0;
//统计1-n中“1”出现的次数
for(int i=1;i<=n;i++){
//temp用于记录当前整数
int temp = i;
while(temp>0){
//判断个位数是否为1
if(temp%10==1)
count++;
//将temp的个位数砍掉
temp /= 10;
}
}
return count;
}
/**
* 上述方法需要对1-n分别进行扫描,而且对每个数还要进行m次扫描(m为数字的位数),因此效率并不高。
* 网上有一些大神提出了一些更高效的方法,但过于巧妙,只能就题论题,缺乏推广的价值,因此这里不再介绍。
* 若有更高效且具有推广价值的方法,欢迎交流。
*/
/**
* 测试
*/
public static void main(String[] args){
System.out.println(countOne(13));
}
}
- 线上服务 CPU 100%?一键定位 so easy!
- 设置输出延迟
- 设置输入延时约束
- MySQL 死锁与日志二三事
- 一千个不用 Null 的理由
- TensorFlow强化学习入门(1.5)——上下文赌博机
- 以太坊·代币开发详解
- JSON Web Token - 在Web应用间安全地传递信息
- TensorFlow强化学习入门(2)——基于策略的Agents
- 用ABAP 生成二维码 QR Code
- CDS view注解解析 - @Environment.systemField
- Document flow API in SAP CRM and C4C
- Python基础知识4:文件操作
- Python基础知识6:格式化字符、颜色
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 轻松学Pytorch-使用ResNet50实现图像分类
- IDEA奇淫小技巧
- [PHP框架] ThinkPHP6 介绍、安装及配置
- 【翻译】withoutboats 的 io-uring 笔记
- [Python]随机生成大量的虚拟信息测试数据(姓名,手机号,ID,家庭住址等)
- Java核心技术之动态代理
- 开源verilog仿真工具iverilog+GTKWave初体验
- [算法] 数组排序 - 冒泡排序法与直接选择排序法
- TS 设计模式01 - 工厂模式
- Spring与Mybatis的整合
- Python中的计数 - Counter类
- vue 记账本
- c/c++补完计划(三): 素数统计
- Python正则表达式(上)
- 附001.Nginx location语法规则