题解 | #扑克牌顺子#

扑克牌顺子

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

有两张非王牌相同时,一定不能组成顺子,其他情况下,可以先对数据排序(升序),再用后一张牌的值减去前一张牌的值,第一张非零牌的值令为零,这样得到的数据就是每张牌之间差的值,当这个数值小于等于4时即可组成顺子。

class Solution {
public:
    bool IsContinuous( vector<int> numbers ) 
    {
        int n=0;
        sort(numbers.begin(),numbers.end());
        for(int i=0;i<4;i++)//除去有非王重复牌的情况
        {
            if(numbers[i]==numbers[i+1]&&numbers[i]!=0)
                return false;
        }
        
        for(int i=4;i>=0;i--)//把前后牌的差值计算出来并把第一张非零牌的值归零
        {
            if(i!=0)
            {
                numbers[i]=numbers[i]-numbers[i-1];
                if(numbers[i-1]==0)
                    numbers[i]=0;
            }
            else
            {
                numbers[i]=0;
            }
        }
        
        for(int i=0;i<5;i++)//计算差值的总和
        {
            n=n+numbers[i];
        }
        if(n<5)
            return true;
        return false;
    }
};
全部评论

相关推荐

某四大行 移动市网络通信工程师 预计到手10左右 双非本
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务