首页 新闻 会员 周边 捐助

问大家一个python编程的问题

0
悬赏园豆:100 [已解决问题] 解决于 2017-12-13 23:17

LeetCode中的一道编程题:

计算数字K在0-n中出现的个数,K可能是0~9中的一个值,如n=12,在[0,1,2,3,4,5,6,7,8,9,10,11,12]中我们发现1出现了5次,试编程返回个数。

下面是我的代码,测试出来的答案是152,但答案给的是161,而且没给源码,我百思不得其解。我的思路是:通过循环每取一个数就将其转化为字符串,通过strip()去掉要数的那个数k,前后长度之差就是这个数中所含k的个数

 1 class Solution:
 2     """
 3     @param: : An integer
 4     @param: : An integer
 5     @return: An integer denote the count of digit k in 1..n
 6     """
 7     
 8     def digitCounts1(self, k, n):
 9         # write your code here
10         count=0
11         
12 
13     def digitCounts(self, k, n):
14         # write your code here
15         count=0
16         for t in range(0,n+1):
17             L=len(str(t))-len(str(t).strip(str(k)))
18             count=count+L
19         return count
20 
21 if __name__=='__main__':
22     tmp=Solution()
23     print(tmp.digitCounts(2,302))
南方博客的主页 南方博客 | 初学一级 | 园豆:62
提问于:2017-12-13 22:00
< >
分享
最佳答案
1

觉得应该是答案给错了吧,将范围缩小些:

for t in range(0,n+1):
    print(t)

print(tmp.digitCounts(2,20))

得到3,和打印出来的结果一致。

收获园豆:100
逐影 | 小虾三级 |园豆:982 | 2017-12-13 22:18

但是我找了个java的代码,跑出来的结果也是161...

南方博客 | 园豆:62 (初学一级) | 2017-12-13 22:34

其实我觉得我的思路没问题,python实现代码也没问题,不知你们怎么看,我感觉那个平台(LeetCode)有问题,不知你们有没有同感

南方博客 | 园豆:62 (初学一级) | 2017-12-13 22:40

@南方博客: 把代码在本地跑一遍,和线上的对比一下就知道是不是平台问题了。

逐影 | 园豆:982 (小虾三级) | 2017-12-13 22:48

@逐影: 我本地跑出来的和平台的不一样,但是我不是很干肯定我的一定是对的,所以我才来集思广益来着

南方博客 | 园豆:62 (初学一级) | 2017-12-13 22:50

@南方博客: 好像答案确实是161,是用正则匹配到的数字个数。

逐影 | 园豆:982 (小虾三级) | 2017-12-13 22:55

@逐影:果然,那试问我的问题出哪里了,我自己实在是找不出

南方博客 | 园豆:62 (初学一级) | 2017-12-13 23:00

@南方博客: strip方法用于移除字符串头尾指定的字符,但像这样的:

(120, 0)
(121, 0)
(122, 2)
(123, 0)
(124, 0)
(125, 0)
(126, 0)
(127, 0)
(128, 0)
(129, 0)

就匹配不到,所以漏算了。

可以print(t,L)把结果打印出来看一下。

逐影 | 园豆:982 (小虾三级) | 2017-12-13 23:07

呃呃,感觉泡脚的时候脑洞最大,刚验证了下,发现120~129之内的2均不能被strip()剥离,就是说strip()是剥离首位两端的匹配字符的,之前学的时候没有留心,还好早发现了

南方博客 | 园豆:62 (初学一级) | 2017-12-13 23:15
其他回答(1)
0
def CntSingle(str,strSub):
    ln = len(strSub)
    cnt = 0
    for i in range(0, ln):
        if strSub[i] == str:
            cnt = cnt+1
    return cnt
    
def CountTotal(stri, lstStr):
    ln = len(lstStr)
    cntTotal = 0
    for i in range(0, ln):
        cntTotal = cntTotal + CntSingle(stri, str(lstStr[i]))
    return cntTotal
if __name__ == '__main__':
    lst = [120,121,122,123,124,125]
    print CountTotal('2', lst)
summerise8090 | 园豆:222 (菜鸟二级) | 2018-03-23 15:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册