leetcode1706.球会落何处C++

链接:

https://leetcode-cn.com/problems/where-will-the-ball-fall/

描述:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码:

class Solution {
public:
    int DFS(vector<vector<int>>& grid,int i,int j)
    {
        int row = grid.size();
        int col = grid[0].size();

        if(i == row) return j;

        if(grid[i][j] == 1)
        {
            if(j == col-1 || grid[i][j+1] == -1) return -1;
            return DFS(grid,i+1,j+1);
        }
        else
        {
            if(j == 0 || grid[i][j-1] == 1) return -1;
            return DFS(grid,i+1,j-1);
        }
    }

    vector<int> findBall(vector<vector<int>>& grid) {
        int row = grid.size();
        int col = grid[0].size();
        vector<int> ret(col,-1);//创建返回数组

        for(int j = 0;j<col;++j)
        {
            ret[j] = DFS(grid,0,j);//对目标值进行改变
        }
        return ret;
    }
};

代码分析:

当一个小球落在某个位置时
当当前位置是1时,那么他会想向右下移动,
如果他的右边也是1,那么他的下一层地址就是i+1,j+1
如果他的右边是-1或者是墙时,那么他就不会到达下一层

同理:
当当前位置是-1时,那么他会想向坐下移动
如果他的左边是-1,那么他的下一层地址就是i+1,j-1
如果他的左边是1,或者是墙时,那么他就不会到达下一层

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值