【剑指offer】整数中1出现的次数(从1到n整数中1出现的次数)To 统计字符串中字符出现的次数(Python)

题目描述

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。

思路:

第一种:将数字转换成为字符串,判断每个字符串中‘1’出现的次数,然后相加。

第二种:如果数字小于10,判断其除以10的余数是否为1;大于10的数字,从个位依次判断每一位是否为1。

代码实现;

第一种:

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1Between1AndN_Solution(self, n):
        # write code here
        count = 0
        for i in range(1,n+1):
            if '1' in str(i):
                count += str(i).count('1')
        return count

第二种:

# -*- coding:utf-8 -*-
class Solution:
    def NumberOf1Between1AndN_Solution(self, n):
        # write code here
        count = 0
        for i in range(1,n+1):
            if i<10 and i%10==1:
                count += 1
            while i/10 != 0:
                if i % 10 == 1:
                    count += 1
                i = i/10
                if i == 1:
                    count += 1
        return count

附:

一、统计字符串中字符出现次数的方法:

s='helloworld'
# 1
d=dict()
for x in s:
    if x not in d.keys():
       d[x]=1
    else:
       d[x]=d[x]+1
print(d)

# 2
d2=dict()
for x in s:
    d2[x]=d2.get(x,0)+1
print(d2)

# 3
d3=dict()
for x in s:
   d3[x]=s.count(x)
print(d3)

二、字符串常用方法:

1.find()、rfind()、index()、rindex()、count()

  find()和rfind()方法分别用来查找一个字符串在另一个字符串制定范围中首次和最后一次出现的位置,如果不存在返回-1.

  index()和rindex()方法用来返回一个字符串在另一个字符串指定范围中首次和最后一次出现的位置,如果不存在则抛出异常

  count()方法用来返回一个字符串在另一个字符串中出现的字数,如果不存在则返回0

2.split()、rsplit()、partition()、rpartition()

  split()和rsplit()方法分别用来以指定字符为分隔符,从字符串左端和右端开始将其分隔成多个字符串,并返回包含分隔结果的列表。

  partition()和rpartition()方法用来以指定字符串为分隔符将原字符串分隔为3个部分,即分隔符之前的字符串,分隔符字符串,分隔符之后的字符串,如果指定的分隔符不在原字符串中,则返回原字符串和两个空字符串

  对于split()和rsplit()方法,如果不指定分隔符,则字符串中的任何空白符号(包括空格、换行符、制表符等)的连续出现都将 被认为是分隔符,返回包含最终分隔结果的列表,另外split()和rsplit()方法还允许指定最大分隔次数。

3.join()

  与split()相反,join()方法用来将列表中多个字符串进行连接,并在相邻两个字符串之间插入指定字符

  使用split() 和 join()方法可以删除字符串中多余的空白字符,如果有连续多个空白字符,只保留一个

4.lower()、upper()、capitalize()、title()、swapcase() 

  lower() 返回小写字符串;upper() 返回大写字符串;capitalize() 字符串首字符大写;title() 每个单词的首字母大写;swapcase() 大小写互换

5.replace()

  该方法用来替换字符串中指定字符或子字符串的所有重复出现,每次只能替换一个字符或字符串,类似Word、WPS等文本编辑器的查找与替换功能,该方法不修改原字符串,返回一个新字符串 

6.strip()、rstrip()、lstrip()

  这几个方法分别用来删除两端,右端、左端连续的空白字符或指定字符

  注:这3个函数的参数指定的字符串并不作为一个整体对待,而是在原字符串的两侧,右侧,左侧删除参数字符串中包含的所有字符

7.eval()

  内置函数eval()用来吧任意字符串转化为Python表达式并求值

8.关键字in

  与列表、元组、字典、集合一样,也可以使用关键字in和not in 来判断一个字符串是否出现在另一个字符串中,返回True或False

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C-Jonn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值