【劍指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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章