楼主加油!链接:https://www.nowcoder.com/questionTerminal/bd7f978302044eee894445e244c7eee6?answerType=1&f=discussion 来源:牛客网 方法一:递归方法(参考力扣答案) 思路: f(n)为1-n范围内,这n个数中1出现的次数 首先将n分为两种情况:情况一:最高位为1(如1234);情况二:最高位不为1(如3234) 情况一:当最高位为1时(以1234为例): ①:将n分为两部分,最高位单独拿出来为1,定义为high;剩下的部分为234,定义为last; ②:获取到最高位的分位,为千分位,即定义pow=1000; ③将数据n定义两个范围: 1.1-999范围内,1的个数为f(pow-1); 2.1000-1234范围内: 1)首先只考虑千分位是1的个数:也就是1000、1001、1002...1234,即234+1,转换下为:last+1 2)其次考虑其他位数上的1的个数为:f(last)。 综上所述:情况一中1出现的次数为:f(pow-1)+last+1+f(last) 情况二:当最高为不为1时(以3234为例): ①:1-999范围内,1的个数依然为:f(pow-1); ②:1000-1999范围内: 1)只考虑千分位是1的个数为:1000、1001、1002...1999即1000个也就是pow; 2)其他位数上1的数量为:f(pow-1) ③:2000-2999范围内1的个数:f(pow-1),注意这里的千分位是2,所以不要考虑分两种情况 ④:3000-3234范围内1的个数:f(last)
1

相关推荐

点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务