導航:
- - - - - - - - - - 分-割-線 - - - - - - - - - - -
一、NC103 反轉字串
描述:寫出一個程式,接受一個字串,然後輸出該字串反轉後的字串。(字串長度不超過1000)
範例:輸入:"abcd",輸出返回值:"dcba"
解析1:轉出字串中的元素組成列表,並反轉列表,再次輸出為字串
class Solution:
def solve(self , str: str) -> str:
# write code here
list1 = []
for i in str:
list1.append(i)
list1.reverse()
s =""
for i in list1:
s = s+i
return s
解析2:利用字串的切片倒序輸出
class Solution:
def solve(self , str: str) -> str:
str1 = str[::-1]
return str1
描述:給定一個長度為 n 的字串,請編寫一個函數判斷該字串是否迴文。如果是迴文請返回true,否則返回false。字串迴文指該字串正序與其逆序逐字元一致。
範例:輸入:"absba",返回值:true;輸入:"ranko",返回值:false
解析1:反轉字串,並增加判斷
class Solution:
def judge(self , str: str) -> bool:
str1 = str[::-1]
if str1 == str:
return True
else:
return False
解析2:使用三母表示式簡化輸出
class Solution:
def judge(self , str: str) -> bool:
return True if str[::-1]==str[:] else False
描述:如果有一個自然數 a 能被自然數 b 整除,則稱 a 為 b 的倍數, b 為 a 的約數。幾個自然數公有的約數,叫做這幾個自然數的公約數。公約數中最大的一個公約數,稱為這幾個自然數的最大公約數。輸入 a 和 b , 請返回 a 和 b 的最大公約數。
範例:輸入3,6,返回3;輸入8,12,返回4
解析1:通過因式分解取出每個數位的質因數,然後遍歷找到兩組質因數裡面相同的質因數,最後通過相乘得到最大公約數
class Solution:
def gcd(self , a: int, b: int) -> int:
#a = 30
#b = 40
res1 = []
res2 = []
res3 = []
# 因式分解
while a > 1:
for i in range(a - 1):
k = i + 2
if a % k == 0:
res1.append(k)
a = int(a / k)
break
#print(res1)
while b > 1:
for i in range(2, b + 1):
if b % i == 0:
res2.append(i)
b = int(b / i)
break
#print(res2)
for i in range(0, len(res1)):
if res1[i] in res2:
res3.append(res1[i])
res2.remove(res1[i])
res = 1
for i in res3:
res = res * i
#print(res)
return res
解析2:輾轉相減法,運算起來很簡潔:出自《九章算術》的一種求最大公約數的演演算法,它原本是為約分而設計的,但它適用於任何需要求最大公約數的場合,以較大的數減較小的數,接著把所得的差與較小的數比較,並以大數減小數。繼續這個操作,直到所得的減數和差相等為止。則第一步中約掉的若干個2的積與第二步中等數的乘積就是所求的最大公約數
class Solution:
def gcd(self , a: int, b: int) -> int:
t=0
m=0
n=0
# 輾轉相減減法
if a == b:
t = a
else:
m = max(a, b)
n = min(a, b)
t = m - n
while n != t:
m, n = max(n, t), min(n, t)
t = m - n
return t
描述:要求輸入一個正整數 n ,請你輸出斐波那契數列的第 n 項,且第一個和第二個數位均為1
範例:輸入4,根據斐波那契數列的定義可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案為3。
解析1:使用遞迴的方式,但是由於演演算法複雜度較高,當資料較大的,執行的時間較長
class Solution:
def Fibonacci(self , n: int) -> int:
if n == 1 or n == 2:
return 1
elif n == 3:
return 2
else:
return self.Fibonacci(n-1) + self.Fibonacci(n-2)
解析2:使用for迴圈的方式,利用記錄中間變數temp避免了重複計算
class Solution:
def Fibonacci(self , n: int) -> int:
a, b = 1, 1
if n <= 1:
return 1
else:
for i in range(2, n):
tmp = a + b
a = b
b = tmp
return b