题目描述:
从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
示例:
输入: [1,2,3,4,5] 输出: True 输入: [0,0,1,2,5] 输出: False
限制:
- 数组长度为 5
- 数组的数取值为 [0, 13]
思路:
顺子的前提是一定不会出现重复,5张牌最大最小的牌差值为4
实现:
package main
import (
"fmt"
)
func main() {
num1 := []int{8, 9, 11, 12, 10}
t := isStraight(num1)
fmt.Println(t) //true
num2 := []int{8, 9, 14, 11, 12}
f := isStraight(num2)
fmt.Println(f) //false
}
func isStraight(num []int) bool {
m := make(map[int]struct{})
mi, ma := 14, 0
for _, num := range num {
if num == 0 {
continue
}
if _, exist := m[num]; exist {
return false
}
mi = min(mi, num)
ma = max(ma, num)
m[num] = struct{}{}
}
return ma-mi < 5
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func min(a, b int) int {
if a < b {
return a
}
return b
}