/** * 题目: * 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? * 为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次, * 但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化, * 可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。 */ public class P221_NumberOf1Between1AndN { public int NumberOf1Between1AndN(int n) { if (n <= 0) { return 0; } String str = n + ""; return NumberOf1(str); } public int NumberOf1(String str) { char[] num = str.toCharArray(); int length = num.length; if (length == 1 && num[0] == '0') { return 0; } if (length == 1 && num[0] >= '1') { return 1; } //1在最高位出现的次数 int firstDigit = 0; if (num[0] > '1') { firstDigit = (int) Math.pow(10, length - 1); } if (num[0] == '1') { firstDigit = Integer.parseInt(str.substring(1)) + 1; } int otherDigits = (int) ((num[0] - '0') * (length - 1) * Math.pow(10, length - 2)); int recursiveDigits = NumberOf1(str.substring(1)); int result = firstDigit + otherDigits + recursiveDigits; return result; } public static void main(String[] args) { int n = 22; P221_NumberOf1Between1AndN test = new P221_NumberOf1Between1AndN(); int result = test.NumberOf1Between1AndN(n); System.out.println(result); } }
剑指offer:1~n整数中1出现的次数(java)
猜你喜欢
转载自blog.csdn.net/Sunshine_liang1/article/details/82860555
今日推荐
周排行