剑指Offer-扑克牌顺子

题目描述 [扑克牌顺子]

LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何, 如果牌能组成顺子就输出true,否则就输出false。为了方便起见,你可以认为大小王是0。

解题思路一

  • 排序
  • 计算0的个数
  • 计算相邻数字距离,保证数字不重复(0除外)
  • 比较距离是否小于0的个数

代码

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        if(numbers.size()!=5) return false;
        sort(numbers.begin(), numbers.end());
        int num_zero=0;
        int i=0;
        while(numbers[i]==0){
            num_zero++;
            i++;
        }
        if(num_zero==4) return true;
        while(i<4){
            if(numbers[i+1]-numbers[i]==1) i++;
            else{
                if(numbers[i+1]==numbers[i]) return false;
                if(num_zero>0 && numbers[i+1]-numbers[i]-1<=num_zero){
                    num_zero = num_zero - numbers[i+1] + numbers[i] + 1;
                    i++;
                }
                else return false;
            }
        }
        return true;
    }
};

解题思路二

如果5个数(含0)是连续的,那么最大值和最小值的差值必然小于等于4。当然我们还要排除0外其他数字重复出现的情况。

所以算法可以如下进行:

  • 保证除0外其他数字不重复出现
  • 计算MAX-MIN的值是否小于4;

代码

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) {
        if(numbers.empty()) return false;
        int max = 0;
        int min = 14;
        int temp = 15;//记录上一个值,与下一个进行比对
        for(int i = 0;i<numbers.size()-1;i++)
        {
            if(temp==numbers[i]) return false;//重复
            if(numbers[i]==0)//是癞子的,则结束本次循环
            {
                continue;
            }
            if(numbers[i]>max) max = numbers[i];//记录最大值
            if(numbers[i]<min) min = numbers[i];//记录最小值
            temp = numbers[i];
            if(max-min>=5) return false;//如果过程中出现max-min>=5说明不可能组成顺子
        }
       return true;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容