4 日目のローテーションとマトリックスのゼロ調整

 

 

AcWing 3174. 回転

画像の回転は、画像を処理する最も簡単な方法の 1 つです。この問題では、画像を時計回りに 9090 度回転させる必要があります。

n×mn×m の 2 次元配列を使用して画像を表現します。たとえば、3×43×4 画像の例を以下に示します。

1 3 5 7
9 8 7 6
3 5 9 7

画像を時計回りに 9090 度回転させた後の画像は次のとおりです。

3 9 1
5 8 3
9 7 5
7 6 7

初期イメージを指定して、回転したイメージを計算します。

入力フォーマット

入力の最初の行には、それぞれ行と列の数を表す 2 つの整数 nn と mm が含まれています。

次の nn 行は、それぞれ mm 整数で、指定された画像を表します。画像の各要素 (ピクセル) は、00 から 255255 までの値を持つ整数です。

出力フォーマット

回転したイメージを表す mm 行と nn 列を出力します。

データ範囲

1≦n,m≦1001≦n,m≦100

入力サンプル:

3 4
1 3 5 7
9 8 7 6
3 5 9 7

出力例:

3 9 1
5 8 3
9 7 5
7 6 7
#include <iostream>

using namespace std;

const int N = 110;

int a[N][N];
int n,m;

int main()
{
    cin >> n >> m;
    for(int i = 0; i < n; i ++ )
        for(int j = 0; j < m; j ++ )
            cin >> a[i][j];
            
    for(int j = 0; j < m; j ++ )
    {
        for(int i = n - 1; i >= 0; i -- )
            cout << a[i][j] << ' ';
        
        cout << endl;
    }
    
    return 0;
}

 

LeetCode 73. 行列のゼロ化

与えられた mxn 行列で、要素が 0 の場合、その行と列のすべての要素を 0 に設定します。インプレースアルゴリズムを使用してください。

高度:

直感的な解決策は O(mn) 余分なスペースを使用することですが、それは良い解決策ではありません。
簡単な改善は O(m + n) 余分なスペースを使用することですが、これはまだ最善の解決策ではありません。
一定のスペースのみを使用するソリューションを思いつくことができますか?
 

例 1:


入力: 行列 = [[1,1,1],[1,0,1],[1,1,1]]
出力: [[1,0,1],[0,0,0],[1 ,0,1]]
例 2:


入力: 行列 = [[0,1,2,0],[3,4,5,2],[1,3,1,5]]
出力: [[0,0,0,0],[0 ,4,5,0],[0,3,1,0]]
 

ヒント:

m == 行列.長さ
n == 行列[0].長さ
1 <= m、n <= 200
-231 <= 行列[i][j] <= 231 - 1

一連の考え 

class Solution {
public:
    void setZeroes(vector<vector<int>>& matrix) {
        int col = 1, row = 1;
        int n = matrix.size(), m = matrix[0].size();

        for(int i = 0; i < n; i ++ )
            if(matrix[i][0] == 0) col = 0;
        for(int i = 0; i < m; i ++ )
            if(matrix[0][i] == 0) row = 0;
        
        for(int i = 1; i < n; i ++ )
        {
            for(int j = 1; j < m; j ++ )
            {
                if(matrix[i][j] == 0)
                {
                    matrix[i][0] = 0;
                    matrix[0][j] = 0;
                }
            }
        }

        for(int i = 1; i < n; i ++ )
            if(matrix[i][0] == 0)
            {
                for(int j = 1 ; j < m; j ++ )
                    matrix[i][j] = 0;
            }

        for(int j = 1; j < m; j ++ )
            if(matrix[0][j] == 0)
            {
                for(int i = 1; i < n; i ++ )
                    matrix[i][j] = 0;
            }
        
        if(!col) 
            for(int i = 0; i < n; i ++ )
                matrix[i][0] = 0;
        if(!row)
            for(int j = 0; j < m; j ++ )
                matrix[0][j] = 0;
    }
};

 

おすすめ

転載: blog.csdn.net/weixin_46125998/article/details/115048203