递归+string

整数中1出现的次数(从1到n整数中1出现的次数)

http://www.nowcoder.com/questionTerminal/bd7f978302044eee894445e244c7eee6

class Solution {
public:
    int NumberOf1Between1AndN_Solution(int n) {
        if(n<=0) return 0;
        string str=to_string(n);

        return NumberOf1(str,0);
    }
    int NumberOf1(string& str,int startIndex){
        if(str.empty() ||str[startIndex]<'0'||str[startIndex]>'9'||str[startIndex]=='\0') return 0;

        unsigned int length=str.size()-startIndex;

        int first=str[startIndex]-'0';
        if(length==1 && first==0)
            return 0;
        if(length==1 && first>0)
            return 1;

        int numFirstDigit=0;
        if(first==1){
            string subStr=str.substr(startIndex+1);
            numFirstDigit=atoi(subStr.c_str())+1;
        }
        else if(first>1)
            numFirstDigit=PowerOf10(length-1);

        int numOtherDifit=first*(length-1)*PowerOf10(length-2);

        int numRecursive=NumberOf1(str, startIndex+1);

        return numFirstDigit+numOtherDifit+numRecursive;
    }
    int PowerOf10(unsigned int n){
        int result=1;
        for(unsigned int i=0; i<n; i++)
            result = 10*result;

        return result;
    }

};
全部评论

相关推荐

11-30 11:07
河南大学 Java
宇宙厂 测开 n*15
丘丘给个offer:有后选后
点赞 评论 收藏
分享
10-17 17:14
门头沟学院 C++
牛客410039819号:北京地区大多是919和927,这两场挂太多人了
投递华为等公司10个岗位
点赞 评论 收藏
分享
寿命齿轮:实习就一段还拉了,项目一看就不是手搓,学历也拉了,技术栈看着倒是挺好,就是不知道面试表现能咋样。 不过现在才大三,争取搞两端大厂实习,或者一个纯个人项目+一段大厂,感觉秋招还是未来可期。
投递美团等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务