1-N中1出现的次数
/*标记1-N中1出现的次数。例如,当N等于18时,1出现的次数为2 + 9 = 11
         个位数出现1的为:1,11,十位数出现1的为10-18*/
public class OneNoInN {
	// 暴力解法
	public static int solution1(int num) {
		// 异常处理
		if (num < 1) 
			return 0;
		// 标记变量count
		int count = 0;
		// 计算没个数中的1的个数,然后加起来,时间复杂度为O(nlogn)
		for (int i = 1; i < num + 1; i++) {
			count += get1Num(i);
		}
		return count;
	}
	public static int get1Num(int num) {
		int res = 0;
		while (num != 0) {
			if (num % 10 == 1) {
				res++;
			}
			num /= 10;			
		}
		return res;
	}
// 第二种方法,进行分析
	// 两种情况:
	// 第一种情况:最高位为1,1-114,首先划分为1-14和15-114,
	// 百位为1,则相应的对应的1的个数为num % tmp1 + 1.即114 % 100 + 1 = 15
	// 十位为1时,有 15 - 19 还有110 - 114;
	// 个位为1时,有21-91,101,111,
	// 则对应的1的个数为1 * (3 - 1) * (100 / 10) 
	// 第二种情况: 最高位大于1,则最高位的情况为tmp1,其他低位的情况类似
	public static int solution2(int num) {
		// 异常处理
		if (num < 1)
			return 0;
		// 得出当前字符的长度
		int len = getLenOfNum(num);
		// 进行判断,如果当前字符长度为1,则返回1
		if (len == 1) 
			return 1;
		// 记录当前最大值一个量级的一个数
		int tmp = powBase10(len - 1);
		// 得到最高位的值
		int first = num / tmp;
		int firstOneNum = first == 1 ? num % tmp + 1 : tmp;
		int otherOneNum = first * (len - 1) * (tmp / 10);
		return firstOneNum + otherOneNum + solution1(num % tmp); 
	}
// 得出当前数值的位数
	public static int getLenOfNum(int num) {
		int len = 0;
		while (num != 0) {
			len++;
			num /= 10;
		}
		return len;
	}
// 求一个指数的值
	public static int powBase10(int base) {
		return (int) Math.pow(10, base);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
}
}
1-N中1出现的次数的更多相关文章
- 整数中1出现的次数(从1到n整数中1出现的次数)
		
题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.AC ...
 - 剑指Offer:面试题32——从1到n整数中1出现的次数(java实现)
		
问题描述: 输入一个整数n,求1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11,12,1一共出现了5次. 思路:(不考虑时间效率的解法,肯定不 ...
 - 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)
		
题目1373:整数中1出现的次数(从1到n整数中1出现的次数) 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他 ...
 - 剑指Offer 整数中1出现的次数(从1到n整数中1出现的次数)
		
题目描述 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...
 - 【编程题目】在从 1 到 n 的正数中 1 出现的次数
		
30.在从 1 到 n 的正数中 1 出现的次数(数组)题目:输入一个整数 n,求从 1 到 n 这 n 个整数的十进制表示中 1 出现的次数.例如输入 12,从 1 到 12 这些整数中包含 1 的 ...
 - 25.在从1到n的正数中1出现的次数[NumberOf1Between1_N]
		
[题目] 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. [分析] 这是一道广为流传的goo ...
 - 剑指offer系列57---整数中1出现的次数
		
[题目]求出1~n的整数中1出现的次数.(10进制) package com.exe11.offer; /** * [题目]求出1~n的整数中1出现的次数. * @author WGS * */ pu ...
 - (剑指Offer)面试题32:从1到n整数中1出现的次数
		
题目: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,一共出现了5次. 思路: 1.累加法 累加1到n中每个整数 ...
 - Google面试题:计算从1到n的正数中1出现的次数
		
题目: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 找工作,准备看写题目,题目说是Goo ...
 - 1049. Counting Ones/整数中1出现的次数(从1到n整数中1出现的次数)
		
The task is simple: given any positive integer N, you are supposed to count the total number of 1's ...
 
随机推荐
- python实战===一行代码就能搞定的事情!
			
打印9*9乘法表: >>> print( '\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) ...
 - Bean相关
			
Bean容器初始化: 本地文件是绝对路径,classpath是相对路径.例子如下: Bean配置项: 常用Bean的配置项: (1)id :在整个IOC容器中,这个bean的唯一标识 (2)class ...
 - phpstorm+xdebug详解
			
1.run->edit configurations StartUrl最好是网址,不然容易出错,Server选择的是配置时添加的Servers,详可参考:http://www.cnblogs.c ...
 - 【转】java中的集合和数组
			
转载自:http://www.cnblogs.com/summers/p/4094260.html 数组Array和集合的区别: (1)数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型 ...
 - Java常见知识点(二)
			
21.常量池专门用于管理在编译时被确定并被保存在已编译的.class文件中的一些数据.它包括了关于类.方法.接口中的常量,还包括字符串常量. 22.String已经重写了Object的equals ...
 - kafka 分区数
			
Kafka的分区,相当于把一个Topic再细分成了多个通道(对应 多个线程) 部署的时候尽量做到一个消费者(线程)对应一个分区. 如何确定Kafka的分区数,key和consumer线程数,以及不消费 ...
 - css项目列表如何水平放置
			
列表项目默认分行排列,那么将列表项设置浮动就可以实现水平放置 1 li{float:left;} 示例如下: 创建Html元素 1 2 3 4 5 6 <ul> <li> ...
 - Centos7下安装7za 及7za常用命令
			
安装必备环境 yum install kernel-devel kernel-headers gcc-c++ make bzip2 下载源码(16.02版本,2016.10.04 publish) w ...
 - 【计算几何】【二分答案】【最大流】bzoj1822 [JSOI2010]Frozen Nova 冷冻波
			
用三角形面积什么的算算点到直线的距离之类……其实相切的情况是可行的……剩下的就跟某SDOI2015一样了. #include<cstdio> #include<cmath> # ...
 - 找出分数最高的前两个学生   Exercise05_09
			
import java.util.Scanner; /** * @author 冰樱梦 * 时间:2018年下半年 * 题目:找出分数最高的前两个学生 * */ public class Exerci ...