<劍指Offer>面試題43: 1 ~ n 整數(shù)中 1 出現(xiàn)的次數(shù)

題目描述 帕弊客網(wǎng)

  • 輸入一個(gè)整數(shù) n堂湖,求 1 ~ n 這 n 個(gè)整數(shù)的十進(jìn)制表示中 1 出現(xiàn)的次數(shù)
  • 例如挟纱, 輸入 12羞酗, 1 ~ 12 這些整數(shù)中包含 1 的數(shù)字有 1, 10紊服, 11檀轨,12; 1 共計(jì)出現(xiàn)了 5 次

題目解讀

  • 劍指Offer 221
  • 思路一欺嗤,常規(guī)方法参萄,不考慮時(shí)間效率
  • 思路二,看偶灞客討論區(qū)的方法讹挎,很優(yōu)秀,點(diǎn)我

代碼

  • 思路一,常規(guī)方法,不考慮時(shí)間效率
#include<iostream>
using namespace std;

class Solution {
public:
    int numberof1(int x){
        int len = 0;

        while(x != 0){
            if(x%10 == 1){
                len ++;
            }
            x /= 10;
        }
        return len;
    }

    int NumberOf1Between1AndN_Solution(int n)
    {
        int numof1 = 0;
        for(int i=1; i <= n; i++){
            numof1 += numberof1(i);
        } 
        return numof1;   
    }
};

int main(){
    Solution ss;
    
    cout<<ss.NumberOf1Between1AndN_Solution(12)<<endl;
}
  • 思路二冲簿,看牛客討論區(qū)的方法怜奖,很優(yōu)秀,點(diǎn)我

主要思路:設(shè)定整數(shù)點(diǎn)(如1翅阵、10歪玲、100迁央、1000、等10的倍數(shù))作為位置點(diǎn) i(對應(yīng)n的個(gè)位滥崩、十位岖圈、百位、千位等)夭委,分別對每個(gè)數(shù)位上有多少包含1的點(diǎn)進(jìn)行分析幅狮。根據(jù)設(shè)定的整數(shù)位置,對n進(jìn)行分割株灸,分為兩部分崇摄,高位 a = n/i,低位 b = n%i. 下面是三個(gè)實(shí)例慌烧。
1逐抑、當(dāng) i 表示百位,且百位對應(yīng)的數(shù)字>=2時(shí)屹蚊,如 n=31456厕氨,i=100,則 a = 314, b = 56汹粤,此時(shí)百位為1的次數(shù)有 a/10 + 1= 314/10 + 1 = 32(最高兩位0~31)命斧,每一次都包含100個(gè)連續(xù)的點(diǎn),即共有( a / 10 + 1 ) * 100 個(gè)點(diǎn)的百位為 1

2嘱兼、當(dāng) i 表示百位国葬,且百位對應(yīng)的數(shù)字為 1 時(shí),如 n=31156芹壕,i=100汇四,則 a=311, b=56,此時(shí)百位對應(yīng)的就是1踢涌,則共有 a / 10 (最高兩位0-30)次包含 100 個(gè)連續(xù)點(diǎn)通孽,當(dāng)最高兩位為31(即a=311),本次只對應(yīng)局部點(diǎn)00~56睁壁,共b+1次背苦,所有點(diǎn)加起來共 ( a / 10 ) * 100 + (b + 1),這些點(diǎn)百位對應(yīng)為1

3潘明、當(dāng)i表示百位糠惫,且百位對應(yīng)的數(shù)為0, 如n = 31056, i = 100,則a=310, b=56钉疫,此時(shí)百位為1的次數(shù)有a/10=31(最高兩位0~30), 所有點(diǎn)加起來共 ( a / 10 ) * 100

綜合上述三種情況巢价,我們就可以知道 百位為 1 的時(shí)候共有多少個(gè)數(shù)字了牲阁,固阁,其他位的情況類似可得

#include<iostream>
using namespace std;

class Solution {
public:

    int NumberOf1Between1AndN_Solution(int n)
    {
        int ones = 0;
        for(int i=1; i <= n; i*=10){
            int a= n / i;
            int b= n % i;

            if(a% 10 == 0){
                ones += (a / 10) * i;
            }
            else if(a% 10 == 1){
                ones += (a / 10) * i + ( b + 1);
            }
            else{
                ones += ((a / 10) + 1) * i;
            }
        }
        return ones;
    }
};

int main(){
    Solution ss;
    cout<<ss.NumberOf1Between1AndN_Solution(12)<<endl;
}

總結(jié)展望

  • 講道理,第二種方法應(yīng)該比第一種要快的城菊,但是疟溉迹客運(yùn)行時(shí)間竟然一樣,真是服氣凌唬,應(yīng)該是挪⑵耄客測試數(shù)據(jù)量小吧.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市客税,隨后出現(xiàn)的幾起案子况褪,更是在濱河造成了極大的恐慌,老刑警劉巖更耻,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件测垛,死亡現(xiàn)場離奇詭異,居然都是意外死亡秧均,警方通過查閱死者的電腦和手機(jī)食侮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來目胡,“玉大人锯七,你說我怎么就攤上這事∮海” “怎么了眉尸?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長巫延。 經(jīng)常有香客問我效五,道長,這世上最難降的妖魔是什么炉峰? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任畏妖,我火速辦了婚禮,結(jié)果婚禮上疼阔,老公的妹妹穿的比我還像新娘戒劫。我一直安慰自己,他們只是感情好婆廊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布迅细。 她就那樣靜靜地躺著,像睡著了一般淘邻。 火紅的嫁衣襯著肌膚如雪茵典。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天宾舅,我揣著相機(jī)與錄音统阿,去河邊找鬼彩倚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扶平,可吹牛的內(nèi)容都是我干的帆离。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼结澄,長吁一口氣:“原來是場噩夢啊……” “哼哥谷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起麻献,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤们妥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后赎瑰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體王悍,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年餐曼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了压储。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡源譬,死狀恐怖集惋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情踩娘,我是刑警寧澤刮刑,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站养渴,受9級特大地震影響雷绢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜理卑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一翘紊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧藐唠,春花似錦帆疟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至妈嘹,卻和暖如春柳琢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工染厅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痘绎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓肖粮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尔苦。 傳聞我的和親對象是個(gè)殘疾皇子涩馆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一,什么是知識 只有那些能夠改變你行動或者認(rèn)知的信息才是知識 舉個(gè)栗子允坚。今天學(xué)習(xí)了《好好說話》魂那,能運(yùn)用到生活或者工...
    b9173cba9a70閱讀 970評論 0 2
  • 今日看到公眾號一篇文章,母親因?yàn)閮鹤由〕硐睿瑹o力醫(yī)治涯雅,跳樓身亡,只為換取保險(xiǎn)的20萬展运,她很決然活逆,沒有任何身后...
    琰琰521閱讀 573評論 0 2
  • 【順應(yīng)人性蔗候,經(jīng)營人心】人際關(guān)系如此,團(tuán)隊(duì)建設(shè)亦如此 0-【楔子】 人性就是人的本能埂软,人心就是我們的價(jià)值觀锈遥、公序良俗...
    毛遂簡記閱讀 443評論 0 1