剑指offer 面试43题
面试43题:
题目:1~n整数中1出现的次数
题:输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1的数字有1,10,11,12一共出现了5次。
解题思路一:直接累加1~n中每个整数中1出现的次数。
解题代码一:
# -*- coding:utf-8 -*- class Solution: def NumberOf1Between1AndN_Solution(self, n): # write code here totalCount=0 for i in range(1,n+1): totalCount+=self.NumberOf1Core(i) return totalCount def NumberOf1Core(self,number): count=0 while(number): if number%10==1: count+=1 number=number//10 return count
解题思路二:同上,只不过先把1~n中每个数字先转为其字符串形式,然后数一数其中“1”出现的次数。
解题代码:
# -*- coding:utf-8 -*- class Solution: def NumberOf1Between1AndN_Solution(self, n): # write code here count=0 for i in range(1,n+1): for j in str(i): if j=="1": count+=1 return count
其他思路:待优化