剑指offer31——1到n中1出现的次数

来源:互联网 发布:编曲软件 好坏 编辑:程序博客网 时间:2024/05/30 04:38
class Solution {public:    int NumberOf1Between1AndN_Solution(int n)    {        if(n<0)            return 0;        char strN[50];        sprintf(strN,"%d",n);        return NumberOf1(strN);        }    int NumberOf1(const char* strN){        if(!strN||*strN<'0'||*strN>'9'||*strN=='\0')            return 0;        int first = *strN-'0';        unsigned int length = static_cast<unsigned int>(strlen(srtN));        if(first==0&&length==1)            return 0;        else if(first==1&&length==1)            return 1;        else{            int numFirstDigit = 0;            if(first>1)                numFirstDigit = PowerBase10(length-1);            else                numFirstDigit = atoi(strN+1)+1;            int numOtherDigits = first*(length-1)*PowerBase10(length-2);            int numRecursive = NumberOf1(strN+1);            return numRecursive+numOtherDigits+numFirstDigit;        }    }    int PowerBase10(unsigned int n){        int result = 1;        int i=0;        for(;i<n;i++)            result *= 10;        return result;    }};
0 0
原创粉丝点击