一、前言
讓人成長的不是歲月,而是經歷。
每天五分鐘,看懂一道簡單、中等難度的算法題,儘可能將複雜的題講清楚。
瘋狂學習python中,2020-06-02更新
二、題目
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(A?B:C)。
示例 1:
輸入: n = 3
輸出: 6
示例 2:
輸入: n = 9
輸出: 45
限制:
1 <= n <= 10000
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/qiu-12n-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
三、解法思路
此題難度在於要求我們不能使用乘除法、for、while、if、else、switch、case 等關鍵字及條件判斷語句,因此我們手裏能用的工具很少,實現該題的常用解決方法一般分爲3種,
1、數學計算法
已知1+2+3+…+n 是一個等差數列求和公式,可以通過公式計算:
class Solution:
def sumNums(self, n: int) -> int:
return n+n(n-1)/2
但是題目要求不能使用乘除法,所以此方法放棄
2、迭代法
python中,可以使用range(n),創建一個從0,開始到n結束,且步長爲1的整數列表,此方法一直配合for和while循環使用,但是在該題中,不能使用循環。
那麼可以直接列表求和,得到結果。
class Solution:
def sumNums(self, n: int) -> int:
return sum(range(1, n+1))
該方法有效,得一分
3、遞歸法
遞歸做爲一種算法在程序設計語言中廣泛應用。 一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型複雜的問題層層轉化爲一個與原問題相似的規模較小的問題,此題是一個等差數列求和方式,也就是設置一個程序每次執行加1操作,調用N次該程序就能得到正確結果。
class Solution:
def sumNums(self, n: int) -> int:
return (n != 0) and (n + self.sumNums(n - 1))
該方法有效,得一分
四、本題考點
本題主要考python基礎運算符和一些常見的運算方法。
print(True and False) # False
print(True and True) # True
print(True or False) # True
print(False or False) # False
直接返回False或者True,無需if判斷