递归+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;
    }

};
全部评论

相关推荐

2025-12-17 12:08
门头沟学院 产品经理
牛客85811352...:1希音不知道算不算大厂 2完全符合,过得很舒服, 3确实只有杂活 领导找我续签到明年3、4月我要继续吗。主要是边实习边秋招这段时间还是有点累
什么是优秀的实习经历
点赞 评论 收藏
分享
2025-12-02 16:58
三峡大学 FPGA工程师
点赞 评论 收藏
分享
2025-12-27 22:21
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务