Leetcode 1706.球会落向何处

题目地址

解题思路

这道题的难点在于: 需要理清楚所有可能遇到的情况,并将它没有bug地表示出来。
具体情况体现为:

  1. 如果当前挡板向左,且是最左列
  2. 如果当前挡板向右,且是最右列
  3. 如果当前挡板向左,且左边的格子的挡板向右
  4. 如果当前挡板向右,且右边的格子的挡板向左
  5. 排除上面的情况,如果挡板向右,则列数加一
  6. 排除上面的情况,如果挡板向左,则列数减一

有关每种情况的实现细节,在下面的代码里都有注释:

代码实现(C++)

class Solution {
public:
    vector<int> findBall(vector<vector<int>>& grid) 
    {
        vector<int> res;
        for(int i=0;i<grid[0].size();i++)
        {
            int col=i;  //列
            int flag=0;  //用来判断是否死球
            for(int j=0;j<grid.size();j++)  //行
            {
                //1.如果当前挡板向左,且是最左列
                if(col==0&&grid[j][col]==-1)
                {
                    flag++;
                    break;
                }
                //2.如果当前挡板向右,且是最右列
                else if(col==grid[0].size()-1&&grid[j][col]==1)
                {
                    flag++;
                    break;
                }
                //3.如果当前挡板向左,且左边的格子的挡板向右
                else if(col!=0&&grid[j][col]==-1&&grid[j][col-1]==1)
                {
                    flag++;
                    break;
                }
                //4.如果当前挡板向右,且右边的格子的挡板向左
                else if(col!=grid[0].size()-1&&grid[j][col]==1&&grid[j][col+1]==-1)
                {
                    flag++;
                    break;
                }
                //5.排除上面的情况,如果挡板向右,则列数加一
                else if(grid[j][col]==1)
                {
                    col++;
                }
                //6.排除上面的情况,如果挡板向左,则列数减一
                else if(grid[j][col]==-1)
                {
                    col--;
                }
            }
            if(flag)
            {
                res.push_back(-1);
            }
            else
            {
                res.push_back(col);
            }
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值