今天刷的第一道算法題,先拿一道簡單點(diǎn)的試試手,這道題目的要求是:
在榕城等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制設(shè)計(jì),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),營銷型網(wǎng)站,外貿(mào)網(wǎng)站建設(shè),榕城網(wǎng)站建設(shè)費(fèi)用合理。兩個(gè)人甲乙在猜數(shù)字,甲先從1,2,3三個(gè)數(shù)字中隨機(jī)抽3次,結(jié)果是guess。乙隨后也隨機(jī)抽三次,結(jié)果是answer。然后對比甲乙兩個(gè)人的結(jié)果。示例如下:
guess:[1,2,3], answer: [1, 2, 3]
那么結(jié)果就是猜對了3次
guess: [1,2,3] answer:[3,2,1]
那么結(jié)果就是猜對了1次
guess: [1,2,3], answer:[3, 3,1]
那么結(jié)果就是猜對了0次
即將guess和answer兩個(gè)作為參數(shù)輸入,返回猜對的次數(shù)。
我想出來的幾個(gè)答案如下所示:
答案1:
class Solution:
def game(self, guess: List[int], answer: List[int]) -> int:
count = 0
for i in zip(guess, answer):
if i[0] == i[1]:
count += 1
return count
思路是:使用zip將兩個(gè)列表進(jìn)行組合,返回每個(gè)列表中單個(gè)元素組成的元組,然后循環(huán)對比。如果相等就將臨時(shí)變量值+1,最終返回統(tǒng)計(jì)結(jié)果。
答案2:
class Solution:
def game(self, guess: List[int], answer: List[int]) -> int:
count = 0
for i in range(3):
if guess[i] == answer[i]:
count+=1
return count
思路:轉(zhuǎn)念一想,發(fā)現(xiàn)自己想復(fù)雜了,因?yàn)椴恍枰唇樱涂梢灾苯尤∵@兩個(gè)列表對應(yīng)的值進(jìn)行對比。就更簡單了,直接循環(huán)對比,有相等的情況將臨時(shí)變量+1,最后返回臨時(shí)變量即可。
答案3:
class Solution:
def game(self, guess: List[int], answer: List[int]) -> int:
return sum(map(lambda x,y: x==y, guess, answer))
思路:既然可以直接對比,那么能不能再簡單點(diǎn),我就想到了map函數(shù),map函數(shù)第一個(gè)參數(shù)直接使用匿名函數(shù)來進(jìn)行元素對比,然后收集函數(shù)執(zhí)行結(jié)果。如果對比相等,結(jié)果是True,對比不相等,結(jié)果是False。
最后返回map函數(shù)直接結(jié)果的總和即可。
答案4:
class Solution:
def game(self, guess: List[int], answer: List[int]) -> int:
if guess == answer:
return 3
elif guess[0] == answer[0]:
if guess[1] == answer[1]:
return 2
else:
return 1
elif guess[1] == answer[1]:
if guess[2] == answer[2]:
return 2
else:
return 1
elif guess[2] == answer[2]:
return 1
else:
return 0
思路:將guess和answer進(jìn)行對比,這是我認(rèn)為自己最差的一個(gè)答案,因?yàn)檫@種情況只適合這種簡短的列表對比,再長一點(diǎn)整個(gè)代碼就沒法看了。
以上就是我的4個(gè)答案,有沒有更好的方式可以來實(shí)現(xiàn)呢?有想法的同學(xué)可以給我留言。