zhxue_11 2018-10-13 05:22 采纳率: 0%
浏览 3542

leetcode661,为什么reference binding to null pointer of type 'struct value_type'?

使用的是C++,为什么指针会超出范围呢?参考的是这里
他的答案可以过

 class Solution {
public:
    vector<vector<int>> imageSmoother(vector<vector<int>>& M) {
        if (M.empty() || M[0].empty()) return {};
        int m = M.size(),n = M[0].size();
        vector<vector<int>> res,dirs = {{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1},{0,1},{1,1}};
        for(int i = 0; i < m; ++i)
            for(int j = 0; j < n; ++j){
                int m = M[i][j],cnt = 1;
                for(auto dir:dirs){
                    int i_plus = i + dir[0], j_plus = j + dir[1];
                    if(i_plus < 0 || i_plus >= m || j_plus < 0 || j_plus >= n) continue;
                    m += M[i_plus][j_plus];
                    ++cnt;
                }
                res[i][j] = m / cnt;
            }
        return res;
    }
};
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-07 06:59
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在你的解决方案中,你尝试遍历vector<vector<int>>中的每个元素,并将它们的值累加到一个名为res的新向量中。但是,当你遍历完所有的元素后,mn变量(即图像的大小)没有被更新。这导致了在循环结束后,mn仍然等于原始的图像大小,而不是当前的大小。

    为了解决这个问题,请在每次迭代中更新mn。你可以这样做:

    for(int i = 0; i < m; ++i)
        for(int j = 0; j < n; ++j){
            //...
        }
    

    这样,当循环结束时,mn将会是新的图像大小,从而避免了超出范围的问题。

    评论

报告相同问题?