日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法提升试炼

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法提升试炼 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:

給定一個正數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);} }

總結

以上是生活随笔為你收集整理的算法提升试炼的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。