扑克牌中的顺子

题目描述:

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

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部