幸運數字8 - LintCode

描述
8是小九的幸運數字,小九想知道在1~n的數中有多少個數字含有8。

1 <= n <= 1000000

樣例
給出 n = 20, 返回2。

解釋:
只有8,18 含有8。

給出 n = 100, 返回19。

解釋:
有8,18,28,38,48,58,68,78,80,81,82,83,84,85,86,87,88,89,98。

思路
判斷數字n是否含有8,如果n不爲0,先判斷其個位,如果不是n=n/10。對於一個包含8的數字i,下一個包含8的數字只可能是i+1(81–82),i+2(78–80),i+9(89–98)或者i+10(8–18)。

#ifndef C1385_H
#define C1385_H
#include<iostream>
using namespace std;
class Solution {
public:
    /**
    * @param n: count lucky numbers from 1 ~ n
    * @return: the numbers of lucky number
    */
    int luckyNumber(int n) {
        // Write your code here
        if (n <= 7)
            return 0;
        int num = 1;
        int i = 8;
        //下一個含有8的數字出現情況只可能比現在的數字大1,2,9或10
        while (i <= n)
        {
            if (hasEight(i+1))
            {
                i += 1;
                num++;
            }
            else if (hasEight(i + 2))
            {
                i += 2;
                num++;
            }
            else if (hasEight(i + 9))
            {
                i += 9;
                num++;
            }
            else if (hasEight(i + 10))
            {
                i += 10;
                num++;
            }
        }
        return --num;
    }
    //判斷數字中是否有8
    bool hasEight(int n)
    {
        while (n)
        {
            if (n % 10 == 8)
                return true;
            n = n / 10;
        }
        return false;
    }
};
#endif
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章