LintCode題目(編號爲順序)

1.A+B問題
解法一:直接return a+b
解法二:通過位運算計算A+B

def add(a, b):
    if a==0:
        return b
    if b==0:
        return a
    else:
        sum=a^b
        j=(a&b)<<1
        return add(sum, j)
①忽略進位計算a+b    只有0,1或1,0時才爲1    sum爲計算兩數的二進制異或結果
②計算進位結果   只有兩個1時才進位   j爲計算兩數的二進制與結果
③將前兩步結果相加,相加方式仍使用上述方法,直至有一個數字爲0,返回另一個

2.尾部的零
設計一個算法,計算出n階乘中尾部零的個數
方法1: ①首先計算一個數字的階乘,得到結果。
②設計一個整除循壞(如下面while所示)假如數字不可以整除10,即尾部沒有0 跳出循壞,假如可以整除10,則進入循環依次看是否可以整除100,1000… 整除位數每多一位,i+1
此方法算法複雜度較高,不能通過測試

#定義一個計算階乘的函數(遞歸求階乘):
def jie(n):
    if n == 1:
        return 1
    else:
        return n * jie(n - 1)
#定義一個計算階乘的函數(循環求階乘):
def jie(n):
    sum=1
    for i in range(1,n+1):
        sum =sum*i
    return sum
    
n = int(input("input"))
sum =jie(n)
i = 0          #初始化個數0
t = 10      
while sum % t == 0:               
    i = i + 1
    t = t * 10
print(i)

方法2:數字的階乘可以寫成一系列因子的乘積,尾部是0即因子2*5,故可直接數 這些因子中有多少個5
例如25的階乘:因子有 1*5 2*5 3*5 4*5 5*5 ,因子5共出現6次。
數量即爲: n/5+n/5/5+…n/5/5…/5

 def function(n):
        sum=0
        while (n/5):
            sum=sum+int(n/5)
            n=n/5
        return sum

37.反轉一個3位整數
反轉一個只有3位數的整數
解法:分別求出這個三位數的百位,十位,個位數字,再分別乘以不同位置的權重。

def function(number):
    x = int(number/100)
    y = int(number/10%10)
    z = int(number%10)
    return z*100+y*10+x

145.大小寫轉換
將一個字符由小寫字母轉換爲大寫字母
解法:字符都有對用的ASCII碼值。先判斷字符是大寫還是小寫字母,若是小寫字母,則將其ASCII碼值減去32,再重新轉換爲字符。反之加上32亦然。

    def function(character):
        if 'a'<=character<='z':
            return chr(ord(character)-32)
        if 'A'<=character<='Z':
            return chr(ord(character)+32)

454.矩陣面積
實現一個矩陣類Rectangle,包含如下的一些成員變量與函數:
1.兩個共有的成員變量 width 和 height 分別代表寬度和高度。
2.一個構造函數,接受2個參數 width 和 height 來設定矩陣的寬度和高度。
3.一個成員函數 getArea,返回這個矩陣的面積。

class Rectangle(object):
    width = 0
    height = 0
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def getArea(self):
        return self.width*self.height
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章