剑指offer45:扑克牌顺子
Posted wxwhnu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer45:扑克牌顺子相关的知识,希望对你有一定的参考价值。
1 题目描述
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。
2 思路和方法
(1)首先应该对数组进行排序。
(2)统计数组中大小王(0)出现的个数。while(numbers[index]==0) ++index; // 统计0的个数
(3)统计数组中所有相邻数之间的间隔。
(4)同时还需要排除对子的情况,如果出现了对子,那么肯定不可能是顺子(0除外)。
(5)最后比较0的个数和间隔大小,如果0的个数大于等于间隔数,说明可以组成顺子。
3 C++核心代码
1 class Solution 2 public: 3 bool IsContinuous( vector<int> numbers ) 4 if (numbers.size() != 5)return false; 5 6 sort(numbers.begin(), numbers.end()); 7 int numOfZero = 0; 8 //统计0的个数 9 for (int i = 0; i != 5; i++) 10 if (!numbers[i]) 11 numOfZero++; 12 13 14 int beg = numOfZero+1; 15 int numOfGap = 0; 16 while (beg < 5) 17 //如果出现了对子,那么肯定不可能是连子 18 if (numbers[beg - 1] == numbers[beg]) 19 return false; 20 21 numOfGap += numbers[beg] - numbers[beg - 1] -1; 22 beg++; 23 24 25 return (numOfZero >= numOfGap) ? true : false; 26 27 ;
4 C++完整代码
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 5 using namespace std; 6 7 int main() 8 vector<int> data 5,7,6,0,4 ; 9 10 if (IsContinuous(data)) 11 cout << "is continuous."<< endl; 12 13 else 14 cout << "You don‘t get lucky." << endl; 15 16 17 system("pause"); 18 return 0; 19 20 21 bool IsContinuous(vector<int> numbers) 22 if (numbers.size() != 5)return false; 23 24 sort(numbers.begin(), numbers.end()); 25 int numOfZero = 0; 26 //统计0的个数 27 for (int i = 0; i != 5; i++) 28 if (!numbers[i]) 29 numOfZero++; 30 31 32 int beg = numOfZero+1; 33 int numOfGap = 0; 34 while (beg < 5) 35 //如果出现了对子,那么肯定不可能是连子 36 if (numbers[beg - 1] == numbers[beg]) 37 return false; 38 39 numOfGap += numbers[beg] - numbers[beg - 1] -1; 40 beg++; 41 42 43 return (numOfZero >= numOfGap) ? true : false; 44
参考资料
https://blog.csdn.net/m0_37950361/article/details/82153790
以上是关于剑指offer45:扑克牌顺子的主要内容,如果未能解决你的问题,请参考以下文章