网站建设内链,茶叶网站策划方案,产品开发流程8个步骤产品经理与项目经理,广告公司女员工深夜兼职1、题目描述
从若干副扑克牌中随机抽 5 张牌#xff0c;判断是不是一个顺子#xff0c;即这5张牌是不是连续的。2#xff5e;10为数字本身#xff0c;A为1#xff0c;J为11#xff0c;Q为12#xff0c;K为13#xff0c;而大、小王为 0 #xff0c;可以看成任意数字。…1、题目描述
从若干副扑克牌中随机抽 5 张牌判断是不是一个顺子即这5张牌是不是连续的。210为数字本身A为1J为11Q为12K为13而大、小王为 0 可以看成任意数字。A 不能视为 14。 示例 1: 输入: [1,2,3,4,5] 输出: True 示例 2: 输入: [0,0,1,2,5] 输出: True
2、VS2019上运行
排序的方法
#include iostream
#include vector
#include algorithmusing namespace std;class Solution {
public:/*** 判断给定的扑克牌数组是否是一个顺子* param nums 给定的扑克牌数组* return 如果是顺子返回true否则返回false*/bool isStraight(vectorint nums) {sort(nums.begin(), nums.end()); // 对扑克牌数组进行排序int zero 0; // 记录0的数量大小王的数量for (int i 0; i 4; i) {if (nums[i] 0) {zero; // 统计0的数量continue;}if (nums[i] nums[i 1]) {return false; // 存在对子不是顺子返回false}zero - nums[i 1] - nums[i] - 1; // 计算间隔并减去大小王的数量}return zero 0; // 如果剩余的大小王数量可以填补所有间隔返回true否则返回false}
};int main() {vectorint nums { 1, 2, 3, 4, 5 };Solution solution;bool result solution.isStraight(nums);cout (result ? true : false) endl;return 0;
}运行结果 true
3、解题思路
1.首先对给定的扑克牌数组进行排序使其按照牌面大小升序排列。2.统计大小王的数量即统计数组中0的个数。3.遍历排序后的数组从第一个非0的数字开始nums[i] ! 0判断后续数字是否连续。具体步骤如下 ~如果遇到相同的数字说明存在对子不满足顺子的要求直接返回false。 ~计算相邻数字之间的间隔排除了0如果间隔大于1则需要使用大小王来填补空缺。将大小王的数量减去该间隔值减1。如果大小王数量不足以填补空缺说明不是顺子返回false。4.如果遍历完所有数字都满足连续关系且大小王的剩余数量足够填补空缺则返回true。
4、题目理解
从一副扑克牌中随机抽取5张牌要判断这5张牌是否是一个顺子即这些牌是否是连续的。给定的扑克牌规则如下 1.数字210对应牌面上的数字本身。 2.A表示1。 3.J表示11。 4.Q表示12。 5.K表示13。 6.大、小王可看作任意数字大、小王分别用0表示。要判断这5张牌是否是一个顺子可以按照以下步骤1.对这5张牌进行排序确保它们按照牌面的大小排列。 2.统计大、小王即0的数量。 3.在排序后的牌中找到第一个非0的数字记作x。 4.从x1开始判断后面的数字是否依次递增即是否连续。如果存在非连续的数字除了0之外则不是顺子。 5.最后考虑大、小王的数量。如果大、小王的数量多于等于缺失的数字数量非0的间隔数量则可以使用大、小王来填补间隔使得牌依旧连续。否则无法凑成一个顺子。