[19] para provar Oferta de segurança: No sentido horário Matrix Imprimir

título Descrição

Introduzir uma matriz, a fim de fora para dentro num sentido horário para imprimir sequencialmente para cada número, por exemplo, se introduzir a seguinte matriz 4 x 4: 1,234,567,891,011,121,314 15 sequencialmente impresso 16 digitais 1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

Resolver um problema: transformar ciclo
. 1  pública  estática do ArrayList <Integer> printMatrix ( int [] [] Matrix) {
 2              a ArrayList <Integer> = Resultado new new ArrayList <Integer> ();
 . 3              IF (matrix.length == 0 ) {
 . 4                  retorno Resultado;
 . 5              }
 6.              // número de linhas e colunas da inicialização matriz 
7.              int fileira = matrix.length, coluna = matriz [0 ] .length;
 . 8              SE (coluna == 0 ) {
 9.                  // Se o número de linhas na matriz não é 0, o número de colunas da matriz ele é 0, ou seja, os elementos vazios da matriz, ainda vazio lista 
10                  de retorno Resultado;
 . 11              }
12 é              / * 
13 é               * um loop por camadas As camadas são, quanto menor for o valor determinado pelas linhas e colunas, quanto menor for o valor -1 é um número ímpar, de modo a considerar o caso,
 14               * é dividido por 2 porque o início de cada ciclo são devidos a esquerda inferior para a direita e da direita para a esquerda enquanto que a linha Passado 2, de modo que só pode tomar metade
 15               * 0,5 + 1, a fim de compensar a camada precedente, e em que pelo menos uma camada de a -1 condição par-ímpar provoca
 16               * / 
. 17              int = Camadas (Math.min (linha, coluna) -1) / 2 + 1. ;
 18 é              para ( int i = 0; I <Camadas; i ++ ) {
 . 19                  / * 
20 é                   * a partir do canto superior esquerdo para os elementos superior direita da diagonal a partir de , uma vez que em cada um deles a partir do canto inferior esquerdo para o canto superior esquerdo irá utilizar-se uma pluralidade de linha elemento anterior actual, de modo que o início j = i.
21                   * atravessando o índice é menor do que o número de colunas das camadas de matriz subtraindo-se o ciclo actual, como nas fases anteriores direito de elemento inferior direito da linha corrente irá ser passado para trás
 22 é                   * * / 
23 é                  para ( intI = J; J <coluna-i, j ++ ) {
 24                      result.add (Matrix [I] [J]);
 25                  }
 26 é                  / * 
27                   * da direita superior para a direita inferior, uma vez que esta rodada será deixada para o canto superior direito de multi gasto acima de elementos de coluna de corrente, de modo que o início k = i + 1.
28                   * atravessando o índice é menor do que o número de linhas de camadas de matriz subtraindo-se o ciclo actual, porque as primeiras voltas do canto inferior direito para o elemento inferior esquerdo será gasto na sequência da coluna corrente.
29                   * A coluna máxima matriz índice é-coluna 1 (a partir de 0), os elementos do número da coluna lista coluna resultado enchimento menos as camadas de índice de ciclo máximo,
 30                   * como rodadas anteriores será gasto a partir da direita superior para a direita inferior do actual colunas, após o elemento de coluna
 31 é                   * * / 
32                  para ( int K = i + 1;. K <linha-I; K ++ ) {
 33 é                      result.add (Matrix [K] [coluna-l- I]);
 34 está                 }
 35                  / * 
36                   * a partir do canto inferior direito para a esquerda inferior, a coluna de matriz de índice máximo é coluna-1 (a partir de 0), porque este um para a direita inferior do elemento direito de um multi-linha atrás da corrente, combinada com a anterior a roda direita
 37                   * gasto no canto inferior direito para a parte de trás do i-ésimo elemento, de modo que o início J = coluna-1-i-
 1. 38                   índice * a partir do canto inferior direito para o canto inferior esquerdo da coluna corrente durante o último ciclo de maior do que ou igual ao número de camadas, porque os ciclos anteriores gasto antes de i-1 a partir do canto inferior esquerdo para o elemento de coluna superior esquerda, de modo j> = i.
39                   * tendo em conta o caso em que o número de linhas é menor que o número de colunas da matriz (por exemplo, linha 6 3), de modo que o índice máximo de linha-1 linha (número de linha inicial de 0), o ciclo de corrente, subtraindo o número de camadas não é igual ao número do ciclo corrente de camadas,
 40                   * Caso contrário, após a última rodada de cima da esquerda para a direita, o próximo terá que repetir o mesmo rodada da direita inferior aos elementos inferior esquerdo.
41                   * preenchimento número lista resultado elemento de linha do índice de linha, subtraindo o número do ciclo máximo de camadas, porque o primeiro será gasto linhas rodadas elemento abaixo da linha de corrente a partir do canto inferior esquerdo para o canto inferior direito
 42 é                   * * / 
43 é                  para ( int J = Coluna I-2; (J> = I) && (= Row-I-I 1.!); J, ) {
44 é                      result.add (Matrix [l- Row I] [J]);
 45                  }
 46 é                  / * 
47                   * a partir do canto inferior esquerdo para o canto superior esquerdo, a linha máxima matriz índice é fileira-1 (a partir de 0), porque é um a partir do canto inferior direito para o canto inferior esquerdo de um multi-elemento trás da coluna corrente, combinado com as etapas anteriores a partir de
 48                   seguindo o i-ésimo elemento * gasto inferior esquerdo ao canto superior esquerdo, de modo que o início k = linha-1-i-
 1. 49                   índice * a partir do canto inferior esquerdo para o canto superior esquerdo da linha actual durante o último ciclo é maior do que o número de camadas, ea linha j> diferente I =,
 50                   * Aqui, se o sinal de igual acabará por ter de repetir este deixou no canto superior direito de um processo o primeiro elemento, por isso k> i.
51                   * tendo menor do que o número de colunas da matriz (por exemplo, 6 linhas e 3 colunas) na linha, de modo que o índice máximo da coluna de coluna-1 menos o ciclo de corrente não é igual ao número do ciclo corrente de camadas de camadas
 52                   *, ou um para a direita para a final no canto inferior direito, a próxima rodada terá que repetir os mesmos elementos do canto inferior esquerdo para o canto superior esquerdo.
53                   * lista de resultados de enchimento número de coluna dos mesmos elementos do índice de coluna corrente de um canto superior esquerdo para o canto superior direito do início do elemento, são eu
 54 é                   ** / 
55                  para ( int k = linha-2-i;! (K> i) && (coluna-1-i = i); k-- ) {
 56                      result.add (matriz [k] [i]);
57                  }
 58              }
 59              retorno resultado;
60          }
solução do problema II: circulando Imprimir
1  privada  estática ArrayList <Integer> list = new ArrayList <> ();
2      pública ArrayList <Integer> printMatrix01 ( int [] [] matriz) {
 3          int linhas = matrix.length;
4          int colunas = matriz [0 ] .length;
5          int início = 0 ;
6          , enquanto (linhas> iniciar * 2 && colunas> iniciar * 2 ) {
 7              printMatrixInCircle (matriz, filas, colunas, início);
8              iniciar ++ ;
9          }
 10          return lista;
. 11      }
 12 é      pública  estática  vazio printMatrixInCircle ( int [] [] Matrix, int linhas, int Colunas, int Iniciar) {
 13 é          // esquerda para a linha de impressão direito 
14          para ( int I = Iniciar; i <Columns - Iniciar; i ++ ) {
 15              List.add (Matrix [Iniciar] [I]);
 16          }
 . 17          // cima para baixo, uma impressão 
18 é          para ( int J = Start + 1; J <fileiras - Iniciar;. J ++ ) {
 . 19              List.add ( Matrix [j] [Colunas - Start - 1. ]);
20          }
 21          // direita para a esquerda na linha de impressão 
22 é          para ( int m = Colunas - Início - 2; m> = Iniciar && linhas - Início - 1> Iniciar;. M-- ) {
 23 é              List.add (matriz [linhas - . Iniciar - 1 ] [m]);
 24          }
 25          // a partir de uma baixa para uma impressão 
26 é          para ( int n-fileiras = - Iniciar - 2;.. n-> Colunas = INICIO + 1 && - Iniciar - 1> Iniciar; n-- ) {
 27              List.add (Matrix [n-] [Iniciar]);
 28          }
 29      }
solução do problema III: Falhanços retangular
. 1  pública  estática do ArrayList <Integer> printMatrix02 ( int [] [] Matrix) {
 2          // como um recipiente para o resultado 
3.          ArrayList <Integer> = Lista nova nova <> ArrayList ();
 . 4          // Número de linhas do acidente variedade get 
5          int row = matrix.length;
 . 6          o tempo (! row = 0 ) {
 . 7              // primeira linha da matriz para adicionar o recipiente 
8.              para ( int i = 0; I <Matrix [0] .length; i ++ ) {
 . 9                  List.add (Matrix [0 ] [I]);
 10              }
 11.              //Quando o número de linhas é igual a 1 há necessidade de proceder, e após a conclusão da impressão sobre ele na parte superior de paragem 
12 é              SE (Fila == 1 ) {
 13 é                  RUPTURA ;
 14              }
 15              // travessia matriz de exclusão por cima da primeira fila, e rotativa e retorna esta matriz 
16              matriz = reverter (Matrix);
 . 17              // número de linhas actualizada 
18 é              fileira = matrix.length;
 . 19          }
 20 é          // retorno 
21 é          retorno Lista;
 22 é      }
 23 é      privada  estático  int [] [] reverter ( int [ ] [] matriz) {
 24          // número de linhas e colunas da matriz para obter 
25         int linhas = matrix.length;
 26          int cols = Matrix [0 ] .length;
 27         // porque nós somos a primeira linha da matriz original atravessado de exclusão, em seguida, gire em uma nova matriz, então primeiro olhar para esta nova inicialização matriz 
28          int [] [] = newMatrix novos novo  int [cols] [-Linhas 1. ];
 29          // esta nova matriz de atribuição 
30          para ( int J = -cols 1;. J> = 0; J, ) {
 31 é              para ( int I = 1;. eu <fileiras; i ++ ) {
 32                  newMatrix [. -J-cols 1] [I-1.] = Matriz [I] [J];
 33 é              }
 34 é          }
 35          //Devolve uma nova matriz 
36          de retorno newMatrix;
 37 [      }

teste:

1  públicas  estáticos  vazios principais (String [] args) {
 2          int [] [] matriz = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} , {13, 14, 15, 16 }};
3          ArrayList <inteiro> lista = printMatrix (matriz);
4          para (Inteiro inteiro: lista) {
 5              System.out.print (inteiro +"" );
6          }
 7      }
 8输出: 1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10

 

Acho que você gosta

Origin www.cnblogs.com/Blog-cpc/p/12457870.html
Recomendado
Clasificación