알고리즘 (1) - 이미지 변환

16693 단어
장차
  :

          ,                  。               。

   1:

   matrix = 
[
  [1,2,3],  
  [4,5,6],  
  [7,8,9]   
],

        ,    :
[
  [7,4,1],                
  [8,5,2],  
  [9,6,3]   
]
   2:

   matrix =s
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

        ,    :
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

나 는 행렬 이 한 줄 씩 바 뀌 면 되 는 것 같다 는 것 을 발견 했다.
[1,2],    [00 01]                   [00 10] 
[3,4]     [10 11]                     [01 11]
         
after:
[3,1]    [10 00]                   
[4,2]    [11 01]
        
   matrix = 
[
  [1,2,3],  [00 01 02]            [00 10 20]
  [4,5,6],  [10 11 12]              [01 11 21]
  [7,8,9]   [20 21 22]              [22 21 20]
],

그리고 코드 를 쓰기 시 작 했 습 니 다. 좀 졸 렸 는 지 전 치 를 쓸 때 제 가 이렇게 썼 습 니 다.
  for (int i=0;i){
            for (int j=0;j){         
                tem = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = tem;
                //System.out.println(matrix[i][j] + " " + matrix[j][i]);
            }
        }

그리고 행렬 전체 가 변 하지 않 은 것 같 아 요. 그래 요. 변 하지 않 은 것 같 아 요. 변 하지 않 은 것 같 아 요!
돌 고 돌 아 갔 기 때문에 어떻게 돌 리 는 지 보 자. 사실 매번 대각선 한쪽 만 뒤 집 으 면 된다.
[1,2],    [00 01]                   [00 10] 
[3,4]     [10 11]                     [01 11]
         
after:
[3,1]    [10 00]                   
[4,2]    [11 01]
        
   matrix = 
[
  [1,2,3],  [00 01 02]            [00 10 20]
  [4,5,6],  [10 11 12]              [01 11 21]
  [7,8,9]   [20 21 22]              [22 21 20]
],

 
 
마지막 은 나의 해답 이다.
class Solution {
    public void rotate(int[][] matrix) {
        int tem = 0;
        for (int i=0;i){
            for (int j=i+1;j//  i=1      
                tem = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = tem;
                //System.out.println(matrix[i][j] + " " + matrix[j][i]);
            }
        }
        for (int i=0;i){
            for (int j=0;j2;j++){
                tem = matrix[i][matrix.length-1-j];
                matrix[i][matrix.length-1-j] = matrix[i][j];
                matrix[i][j] = tem;
            }
        }
    }
}

전체 테스트
public class S4{//bywu  
    
    public void rotate(int[][] matrix) {
        S4 solution = new S4();
        int tem = 0;
        for (int i=0;i){
            for (int j=i+1;j//  i=1      
                tem = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = tem;
                //System.out.println(matrix[i][j] + " " + matrix[j][i]);
            }
        }
        for (int i=0;i){
            for (int j=0;j2;j++){
                tem = matrix[i][matrix.length-1-j];
                matrix[i][matrix.length-1-j] = matrix[i][j];
                matrix[i][j] = tem;
            }
        }
        System.out.println("after");
        solution.print_array(matrix);
    }
    public void print_array(int[][] arr){
        for (int i=0;i<4;i++){
            for (int j=0;j<4;j++){
                System.out.print("   "+arr[i][j]);
            }
            System.out.println("");
        }
    }
    public static void main(String[] args){
        S4 solution = new S4();
        int[][] matrix = {
              { 5, 1, 9,11},
              { 2, 4, 8,10},
              {13, 3, 6, 7},
              {15,14,12,16}
            };
        solution.print_array(matrix);
        solution.rotate(matrix);
    }
}

좋은 웹페이지 즐겨찾기