从1到 n整数中1出现的次数

来源:互联网 发布:ug编程二次开粗绝招 编辑:程序博客网 时间:2024/04/30 10:40

输入一个整数n,求1到 n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。

解:

1.字符串

public int NumberOf1Between1AndN_Solution(int n) {     int num = n;    int count = 0;// 计算数字中含有1的数字个数。    int strLen = 0;//每个数字的长度    for (int i = 0; i <= num; i++) {        String str = String.valueOf(i);        strLen = str.length();        for (int j = 0; j < strLen; j++) {            if (str.charAt(j) == '1') {                count++;            }        }    }     return count;}
2.
public class Solution {    public int NumberOf1Between1AndN_Solution(int n) {     int count = 0;        for(int i=0;i<=n;i++) {            count += NumberOf1(i);        }        return count;    }            int NumberOf1(int n)    {        int count = 0;        while(n!=0) {            if(n%10 == 1) count++;            n /= 10;        }        return count;    }}
3.数学规律
public class Solution {    public int NumberOf1Between1AndN_Solution(int n) {        if (n < 1)            return 0;        int len = getLenOfNum(n);        if (len == 1)            return 1;        int tmp = (int) Math.pow(10, len - 1);        int first = n / tmp;        int firstOneNum = first == 1 ? n % tmp + 1 : tmp;        int otherOneNUm = first * (len - 1) * (tmp / 10);        return firstOneNum + otherOneNUm + NumberOf1Between1AndN_Solution(n % tmp);    }     private int getLenOfNum(int n) {        int len = 0;        while (n != 0) {            len++;            n /= 10;        }        return len;    }}


0 0
原创粉丝点击