题解 | #扑克牌顺子#

扑克牌顺子

https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4

#include <algorithm>
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param numbers int整型vector
     * @return bool布尔型
     */
    bool IsContinuous(vector<int>& numbers) {
        // write code here
        sort(numbers.begin(), numbers.end());
        // 记录大小王的个数
        int count = 0;
        // 记录当前要比对的牌面
        int temp = -1;
        for (int i = 0; i < numbers.size() - 1; ++i) {
            if (temp < numbers[i]) {
                temp = numbers[i];
            }
            // 有四个大小王,必定是顺子
            if (count == 4) {
                return true;
            }
            if (numbers[i] == 0) {
                count++;
            }
            // 判断当前值与下一个值是否连续
            // 不连续则消耗一个大小王的个数来补充一次缺失的下一位
            else if (temp + 1 != numbers[i + 1]) {
                if (count == 0) {
                    return false;
                } else {
                    temp += 1;
                    count--;
                    // 用补充的牌面与之前牌面的下一位重新比对,看是否能完成填充
                    i--;
                }
            }
        }
        return true;
    }
};

全部评论

相关推荐

02-11 17:51
腾讯_TEG_技术
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务