offer_31

概要:整数中出现1的次数(从1到n整数中1出现的次数)

题目描述

求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)

  • 思路分析:
  • 0-9 为一个循环,出现1的次数为1次,
  • 如果当前值为1
    • 说明多出现了 当前值的 后面的数字+1次

      • 比如11 先出现10*权值(1)次,也就是0-9循环了10次;
      • 然后当前值为个位的1,需要再加 后面的数字+1次,也就是 0 +1 ;所以总的次数就是11次
  • 如果当前值大于1
    • *说明多出现了 当前值的 权值 *1次

      • 比如12 先出现10*权值(1)次,也就是0-9循环了10次;
      • 然后当前值为个位的2,需要再加 当前值的 权值 *1次 ,也就是 1 +1 ;所以总的次数就是12次
  • 提出公共部分 ”先出现10*权值(1)次“放在最前面

代码实现:

public class Solution {

 public int NumberOf1Between1AndN_Solution(int n) {

    int cur;			//每轮循环求cur位置上的1的个数
int result = 0; //统计出现的总次数
int mul = 1; //用来记录cur位置处于那个位置,个位,十位,百位...也就是权值
int input = n; //保存输入,便于取到当前位置后面的的数值 例如123 当前是1,为了取到23
int target = 1; //取值1-9,表示求的target出现的个数,如本题为1 while (n != 0) {//把当前值的最高位查完 如123
cur = n % 10;//取出最后一位 3
n /= 10;//剩下的数字12 result += n * mul; // 12 *1+0 就是当前位置 前面的数字 乘以当前位置的权值,代表转了多少圈,毕竟都是0-9累加的,前面数字多少就代表走了多少圈,也就是多少个1 if (cur > target) {// 3 >1如果当前值比1大,就说明多了一次,比如123 当前是3 是比1大,说明多出现了一次,这个一次就例如 1
result += 1 * mul; //权值*1加上之前的值
}
else if (cur == target) {//如果当前值等于一,说明出现了当前值后面的数字次1还要加1次
result += input % mul + 1;
} mul *= 10;
} return result;
} }

整数中出现1的次数(从1到n整数中1出现的次数)的更多相关文章

  1. 整数中1出现的次数(从1到n整数中1出现的次数)

    整数中1出现的次数(从1到n整数中1出现的次数) 题目描述 求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中1出现的次数?为此他特别数了一下1 ~ 13中包含1的数字有1.10 ...

  2. 剑指Offer-31.整数中1出现的次数(从1到n整数中1出现的次数)(C++/Java)

    题目: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.A ...

  3. 31.整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  4. php字符串查找函数 php查找字符串中出现的次数函数substr_count,判断字符串中是否包含另一个字符串函数strpos

    php字符串查找函数 php查找字符串中出现的次数函数substr_count,判断字符串中是否包含另一个字符串函数strpossubstr_count($haystack, $needle [,$o ...

  5. python1.返回一个字符串中出现次数第二多的单词 2.字符串中可能有英文单词、标点、空格 3.字符串中的英文字符全部是小写

    import re from collections import Counter def second_count_word(s): # # 利用正则按标点和空格切割,有其他标点可以添加到[]内 # ...

  6. 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组

    题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...

  7. LoadRunner中Action的迭代次数的设置和运行场景中设置

    LoadRunner中Action的迭代次数的设置和运行场景中设置 LoadRunner是怎么重复迭代和怎么增加并发运行的呢? 另外,在参数化时,对于一次压力测试中均只能用一次的资源应该怎么参数化呢? ...

  8. 对于大于等于3的整数n,在区间【n,3/2 * n】中一定存在一个素数

    对于大于3的整数n,在区间[n,3/2 * n]中一定存在一个素数

  9. 4.产生10个1-100的随机数,并放到一个数组中 (1)把数组中大于等于10的数字放到一个list集合中,并打印到控制台。 (2)把数组中的数字放到当前文件夹的numArr.txt文件中

    package cn.it.text; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayLis ...

  10. Python学习之---Python中的内置函数(方法)(更新中。。。)

    add(item)   #将item添加到s中,如果item已经在s中,则无任何效果 break        #退出循环,不会再运行循环中余下的代码 bool()     #将参数转换为布尔型 by ...

随机推荐

  1. go+redis实现消息队列发布与订阅

    在做项目过程中,实现websocket得时候,不知道哪里写的不太合适,客户端消息收到一定程度,剩下的消息收不到,修改了缓冲区大小,还是没有解决问题,后面因为项目结束期比较紧张,没有时间调试消息的时候, ...

  2. python使用pysimplegui简单制作一个exe程序

    一.安装打包程序 控制台输入: pip install pysimplegui-exemaker -- 安装exe制作库 pip install PySimpleGUI -- 安装图形化界面编辑库 二 ...

  3. 2022-05-16内部群每日三题-清辉PMP

    1.项目可交付成果已移交给客户,项目经理现在必须收集项目参与者的反馈意见.项目经理应该查阅哪份文件来确定哪些人应该被包含进请求反馈意见的名单中? A.相关方登记册 B.沟通管理计划 C.经验教训 D. ...

  4. nuxt 服务端渲染注意事项

    1.路由 nuxt按照 pages 文件夹的目录结构自动生成路由 http://localhost:3000/user/reg 相当于 去访问 pages文件夹 下的 user文件夹 下的 reg.v ...

  5. unity 阿拉伯数字转中文汉字

    直接调用即可 代码如下: using System; using System.Collections; using System.Collections.Generic; using System. ...

  6. tkinter的after函数的使用方法

    1,模块tkinter里面没有aften函数,aften是部分类的类方法. import tkinter l = dir(tkinter) for s in l: if 'after' in eval ...

  7. Mysql 系统参数查看

    1.查看数据库版本 select version(); 2.查看是否支持分区 show variables like '%partition%';show plugins;

  8. 性能测试-性能分析思路以及CPU

    1.性能分析思路 性能测试分析的思路:先分析硬件 .网络. 系统配置.应用程序 硬件: cpu.内存.磁盘.网络.io 4.常见问题处理4.1 常见问题及解决方法如果r经常大于4,且id经常少于40, ...

  9. Python学习笔记(五)if分支语句

    一.if语法 示例: 1 money = int(input('请输入余额:')) 2 if money >= 5: 3 print('买得起!') 4 5 if True: 6 print(' ...

  10. docker 运行环境

    步骤 1 - 启用适用于 Linux 的 Windows 子系统 需要先启用"适用于 Linux 的 Windows 子系统"可选功能,然后才能在 Windows 上安装 Linu ...