扑克牌中的顺子
1:题目描述
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2:题目分析
先排序,然后遍历统计出大小王的个数,然后在遇到不是顺子的情况时,通过用大小王进行弥补,当无法弥补时,返回false即可。
3:代码示例
package JianZhiOffer61; import java.net.Socket; /** * @author :dazhu * @date :Created in 2020/4/23 9:12 * @description:扑克牌的顺子 * @modified By: * @version: $ */ public class Main { public static void main(String[] args) { Solution solution = new Solution(); int[] arr = new int[]{0,0,8,4,5}; System.out.println(solution.isStraight(arr)); } } /** * 先使用排序,然后再遍历判断。 */ class Solution { public boolean isStraight(int[] nums) { //先排序 QuickSort(nums); int numberOfKing = 0; //遍历,进行是不是顺子判断 for(int i=0;i<nums.length-1;i++){ //如果是0,先统计大小王的个数, if(nums[i]==0){ numberOfKing++; } else { //如果不是0, // 如果相邻的值差值大于1,则先尝试用大小王弥补, int gap = nums[i + 1] - nums[i]; //如果相邻差值为0,意味着重复没不可能为顺子 if(gap ==0){ return false; } if (gap > 1) { numberOfKing = numberOfKing - gap + 1; } //一旦numberOfKing小于0,意味着当前出现的, // 差值是大小王无法弥补的,所以直接return false。 if (numberOfKing < 0) { return false; } } } //如果一切顺子,则return true; return true; } public void QuickSort(int[]array){ QSort(array,0,array.length-1); } //快速排序递归算法 public void QSort(int[]array,int low,int high){ int pivot; if(low<high){ //算出枢轴值,pivot将array一分为二 pivot = Partution(array,low,high); //对低子表递归排序 QSort(array,low,pivot-1); //对高子表递归排序 QSort(array,pivot+1,high); } } //交换数组种子表的记录,是枢轴记录到位,并返回其所在位置 //此时,在之前所有记录都小于该记录位置, public int Partution(int[]array,int low,int high){ //暂定最低位为枢轴值 int pivotkey = array[low]; //当low大于等于high时,停止 while(low<high){ //从high到low进行判断,找到小于枢轴值时 //进行high和low交换 while(low<high&&array[high]>=pivotkey){ high--; } swap(array,low,high); //从low到high进行判断,找到大于枢轴值时 //进行high和low交换 while(low<high&&array[low]<=pivotkey){ low++; } swap(array,low,high); } //经过前面的交换,返回当前枢轴值所在位置。 return low; } //由于排序中,最经常使用就是交换操作,对数组进行交换操作 public void swap(int[]array,int i,int j){ int temp = array[i]; array[i] = array[j]; array[j] = temp; } }