题目描述:
从若干副扑克牌中随机抽 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 }