LeetCode 是一個可以讓你用各種程式語言,練習解答各種題目的地方,並且原則上是撰寫函式來解答,不需要像 UVa Online Judge 或 ZeroJudge 一樣自己讀取使用者的輸入。本篇將說明使用 Python 語言解答題目時的相關原則,首先要注意的是,LeetCode 的語言選項提供了 Python 和 Python3,如果你選擇了 Python3,則其函式架構會包含 type hints,即輸入和輸出的參數類型提示;但 type hints 的部份狀況在 Python 3.6 等較早版本並未完整支援,因此本篇的範例將以 Python 選項為主,唯此選項會讓語法改為以 Python 2 的方式來解讀,因此可能需要注意除法的規則不同(Python 2 的除法,在兩邊都是整數時,會把商的小數丟掉),以及部分內建函式尚未支援(例如 math.gcd)等問題。

LeetCode 的架構規則,會有一個 Solution 物件,其中包含一個指定了名稱和參數的函式。以一個「把輸入數字加一」的範例題目來說,函式名稱可能會叫做「addOne」,輸入參數可能只有一個 n,你需要做的事情是根據參數算好解答後再回傳回去,如下:

class Solution(object):
	def addOne(self, num):
		return num + 1

在上述範例中,前兩行都會由題目給定,你不應該對他們做任何修改。

如果要對你寫好的程式做測試,首先必須使用「S = Solution()」建立一個物件,並在呼叫一般函式的方法前面加上「S.」來測試。整段程式可以撰寫在全域範圍,也可以包含在「if __name__ == '__main__':」裡面,如下:

class Solution(object):
	def addOne(self, num):
		return num + 1


if __name__ == '__main__':
	S = Solution()
	print(S.addOne(123))

撰寫及測試完成後,送出至 LeetCode 時,可以只複製 class 區塊並貼上,也可以連「if __name__ == '__main__':」一起複製並貼上。

如果你在解題時需要用到遞迴,則有多種方法可以使用,但以撰寫全域函式最為簡單,以下以階乘來做示範:

def factorial(n):
	if n == 1:
		return 1
	return n * factorial(n - 1)


class Solution(object):
	def factorial(self, num):
		return factorial(num)


if __name__ == '__main__':
	S = Solution()
	print(S.factorial(5))

在上述範例中,我們在物件內外使用了一樣的函式名稱,但是 Python 會自動幫你判別是物件內或物件外的函式,因此不會造成語法錯誤。當然,以此種方式撰寫時,必須連同物件外的函式一起送出至 LeetCode 的平台。