java之从1到n整数中1出现的次数
来源:互联网 发布:分色软件 编辑:程序博客网 时间:2024/05/22 17:40
题目:输入一个整数n,求从1到n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1、10、11和12、1一共出现5次。
解法1:
package BitCount;import java.util.Scanner;public class CountOneMain {public static int countOne(int n) {int num = 0;for (int i = 1; i <= n; i++)num += NumberOf1(i);return num;}public static int NumberOf1(int n) {int num = 0;while (n != 0) {if (n % 10 == 1)num++;n = n / 10;}return num;}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();System.out.println(countOne(n));}}其时间复杂度为O(n*logn),这种情况面试官不会满意还需要提高。
解法二:
package BitCount;import java.util.Scanner;public class CountOneMain1 { public static int num_of_bits(int n){ int k = 0; //初始为0位 for(int m = n; m > 0; m /=10) k ++; return k;}//得到一个数n的第i位的数字。最低位为第0位static int number_of(int n, int i){ int num = num_of_bits(n); if(i < 0 || i > (num-1)) return 0; return ((int)(n/Math.pow(10,num-i-1)));}//从0到n的所有整数中1数字出现的次数//实现方案1:直接利用数n每个位上的归纳算出1出现的个数public static int count_From_One_1( int n){ //位数 int num = num_of_bits(n); //跨度 int scale = (int)Math.pow(10, num-1); //商 int quotient = 0; //余数 int remainder = 0; //某一位的数的大小。 int bit = 0;//初始为0 int count = 0; //计数 for(int i = 0; i < num; i++) { count += quotient * scale; bit = number_of(n,i); if(bit > 1) count += scale; else if(bit == 1) { if(i == num-1) remainder = 1; else remainder = n%scale + 1; count += remainder; } quotient = (int)(n/scale); scale /= 10; } return count;}public static void main(String[] args) {Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();System.out.println(count_From_One_1(n));}}
0 0
- java之从1到n整数中1出现的次数
- 牛客网刷题之整数中1出现的次数(从1到n整数中1出现的次数)
- 整数中1出现的次数(从1到n整数中1出现的次数) java
- 整数中1出现的次数(从1到n整数中1出现的次数)(java版)
- 整数中1出现的次数(从1到n整数中1出现的次数)java实现
- 整数中1出现的次数(从1到n整数中1出现的次数)
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- WSUS环境下客户端常用命令
- GPU上和CPU上执行函数时间比较
- 视频的每一帧转换成字符图
- Windows风格的Loading动画Android实现(2)
- Android之——AIDL深入
- java之从1到n整数中1出现的次数
- PAT (Advanced Level) 1052. Linked List Sorting (25) 结构体排序
- 通过WSUS3.0 SP2为客户端部署IE8
- ACM常见高精度总结(java用法)
- 经典的SQL语句,适合新手练习使用(一)
- html5 列表居中
- osmand探索--编译运行源码
- Linux 用户和组
- (九十)使用多个storyboard+代码实现控制器的分开管理