【算法刷怪】leetcode-832.反转图像 思路

非最优解,仅记录学习。
算法思路;
其实为对半互换,只看一半元素(n/2个元素)就行
双层循环,外层控制行数,内层控制当前行元素调换并反转(1减法);
以n/2为界,循环遍历下标++,每次调换并反转[i][j]和[i][n-j-1]。
奇数n需要特殊处理,由于只每次j<n/2,中间一列不会被调换故需单独反转。

/*
*/
class Solution {
public:
    vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image) {
        int m=image.size(),n=image[0].size(),t;
        for(int i=0;i<m;i++){
            int j;
            for(j=0;j<n/2;j++){
                t=1-image[i][j];
                image[i][j]=1-image[i][n-j-1];//!n-j-1而非n-1
                image[i][n-j-1]=t;
            }
            if(n%2!=0){
                //若列为基数则需要再单独反转中间一列
                image[i][j]=1-image[i][j];//!for循环出来j为n/2,不满足条件但是依旧自增。
            }
        }
        return image;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值