算法提升试炼
問題:
給定一個正數N,比如N = 13,在紙上把所有數都列出來如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
可以數出1這個字符出現了6次
給定一個正數N,如果 把1~N都列出來,
返回1這個字符出現的多少次
示例
輸入 29
輸出13
思想
首先求出數組num的位數,它最高位的一的數量是10的k-1次方,k是位數。
其次看最高位是否是一,如果是一那么最高位的一就是num除余最高位一總數在加一,如果不是,就是滿的一然后求最高位以外其他位置一的數量,比如29最高位一的數量是10,現在求它個位數一的數量,其他位數一的數量是最高位*(位數減以)*(10的k-2次方)然后相加就是這兩位數字的一的總數,讓后遞歸到個位數,依此類推。
代碼
public class Code03_OneNumber {public static int solution(int num) {if(num == 0) {return 0;}int len = lenOfNum(num);if(len == 1) {return 1;}int temp1 = (int)Math.pow(10, len-1);int first = num / temp1;int firstOneNum = first == 1 ? num % temp1 + 1 : temp1;//first*(len-1)*math.pow(10,len-2)等于最高位以外位數的一的數量int otherOneNUm = first *(len -1)*(temp1 / 10);return firstOneNum + otherOneNUm + solution(num % temp1);}public static int lenOfNum(int num) {int len = 0;while(num > 0) {len++;num /= 10;}return len;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);int num = sc.nextInt();int ans = solution(num);System.out.println(ans);} }總結
- 上一篇: 上位机UI界面设计项目
- 下一篇: [机缘参悟-39]:鬼谷子-第五飞箝篇