字节跳动实习面试算法题
1、题目描述
什么是同花顺:5张牌,牌面数字能够连续,则是顺子;花色相同则为同花;能找出5张花色相同且牌面数字连续的,即是同花顺。
副牌4种花色分别是♠,♥,♣,◆。每个花色从A到K共13张牌,总共
4*13=52张牌。
要求:用0-51表示这52张牌,按照顺序,♠A-♠K为0-12,♥A-♥K为13-25,♣A-♣K为26-38,◆A-◆K为39-51。
一副牌,从中任意发出7张牌,存在数组input中,实现一个judge函数返回true或者false判断是否有同花顺。
// 样例
function judge(input){
let arr =[9,5,6,7,7,8,0,11]//56789是同花顺
let arr2 = [0,4 6 7 8 9, 9 11]
console.log(judge(arr))/true
console.log(judge(arr2))// false
二、解题思路
简单模拟: 先判断顺子,再检查同花色
三、Python代码实现
# poker = [9,5,6,7,7,8,0,11]
poker = eval(input())
# 分别封装♠,♥,♣,◆ 四种花色
def spade(x):
if x >= 0 and x <= 12:
return True
else:
return False
def heart(x):
if x >= 13 and x <= 25:
return True
else:
return False
def club(x):
if x >= 26 and x <= 38:
return True
else:
return False
def diamond(x):
if x >= 39 and x <= 51:
return True
else:
return False
def check_suit(x,y): # 检查x和y是否为同一种花色
if spade(x) and spade(y):
return True
if heart(x) and heart(y):
return True
if club(x) and club(y):
return True
if diamond(x) and diamond(y):
return True
return False
def judge(a:list):
# 排序+去重——>错误做法
# a.sort()
# a = list(set(a))
a = list(set(a)) # 先去重,去重后a中的元素是唯一的
a.sort() # 然后对去重后的列表进行排序
if len(a) < 5: # 如果去重后的列表长度小于5,那么肯定不可能是顺子
return False
n = len(a)
for i in range(n-4):
if i+4 < n:
if a[i] + 4 == a[i+4]: # 说明是顺子
if check_suit(a[i],a[i+4]): # 说明是同花顺
return True
return False
print(judge(poker))
四、参考链接
参考博客链接:判断7张扑克牌是否含有同花顺(5张同花顺子)