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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法—2,记一个自己的算法题 计算数字k在0到n中的出现的次数,k可能是0~9的一个值

發(fā)布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法—2,记一个自己的算法题 计算数字k在0到n中的出现的次数,k可能是0~9的一个值 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

3 計算數(shù)字k在0到n中的出現(xiàn)的次數(shù),k可能是0~9的一個值

例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我們發(fā)現(xiàn)1出現(xiàn)了5次 (1, 10, 11, 12)

AC

int countDigitOne(int n, int k) {if (n<10 &&k==0) {return 1;}int sum =0;int level = 1;while(n / level != 0){if (k == 0 && n / (level * 10) == 0) {// 最高位不能為0break;}int cur = (n/level) %10;//計算當前位int bef = n/(10*level);//計算當前位高位int aft = n - n/level *level;//計算當前位的低位if (cur >k) {sum += (bef+1)*level;}else if (cur <k) {sum += (bef)*level;}else{sum += (bef)*level +aft+1;}level*= 10;}return sum; }

這道算法題其實算不上難,但是我的思路卻一直限制了我,走了一些彎路,實在不應(yīng)該。

首先看這道算法題,計算出現(xiàn)的次數(shù),我們可以看一個例子來理解這道題。

如123中出現(xiàn)的2的次數(shù)。

首先123中出現(xiàn)了多少次2,我們可以這么想,個位有多少個2,十位有多少個2,百位有多少2。

1,個位有多少2呢?因為3是大于2的,所以2 12 22 32 42…122一共有12 +1 個,我們可以想象,如果個位的3小于2,那么就只有12個了,最后一個12X上不會有。如果等于呢 則也是12+1。

2,十位有多少2呢? 因為2 ==2 ,所以 21 22 23 24 25…29 120 121 122,這里可以看出來加入十位大于2的時候,則會有 20個,如果小于2,則10個,如果等于,則是10 + 個位+1 (因為個位是2,而計數(shù)從0開始 ,如這里加的這個1是120這個)

這里我們可以進行總結(jié):

如果 當前位大于k,則 (高位+1)乘 當前的計數(shù)級別(個位為1,十位為10,百位為百)

如果當前位小于k, 則 為高位 乘 當前的計數(shù)級別。

如果等于,則為 高位數(shù) 乘 當前計數(shù)級別 + 低位數(shù)+1。

這里的難點就只剩下怎么計算這個當前位,怎么計算當前位的高位,怎么計算當前位的低位。

例如123 ,如果要計算十位的高位,低位,當前位。

當前位:123/10(計數(shù)級別) %10(固定10) = 12%10 = 2

高位: 123/(10(固定10) * 10(計數(shù)級別))

低位: 123 - 123/10(計數(shù)級別)*10(計數(shù)級別)

整理一下就是

int cur = (n/level) %10;//計算當前位int bef = n/(10*level);//計算當前位高位int aft = n - n/level *level;//計算當前位的低位 與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖

總結(jié)

以上是生活随笔為你收集整理的算法—2,记一个自己的算法题 计算数字k在0到n中的出现的次数,k可能是0~9的一个值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。