Este artigo descreve o método de implementação de números de loopback de saída (Matrix Spiral) em Java. Compartilhe -o para sua referência, como segue:
Eu já vi isso antes, mas não consegui; Eu vi você adeus ao fórum naquele dia, e a inspiração veio. É tão incrível
A complexidade parece ser O (n)
Salve
Pacote de demonstração; classe pública snakematrixdemo {public static void main (string [] args) {int m = 5;/* linha*/int n = 5;/* coluna*/int [] [] pos = new int [m] [n];/* posição*//*** A estrutura da posição é a seguinte: [0] [0], [0] [1], [0] [1], [0] [2], [0] [3], [0] [4] * * [1] [0], [1] [1], [1] [2], [1] [3], [1] [4 * * [2] [0] [2], [1] [1] [3], [1] [4 * * * [2] [0] [2], [1] [1] [3], [1] [4 * * [2] [0] [2], [1] [1] [3], [1] [4 * * [2] [0] [2], [1] [1] [3], [1] [4 * * [2] [0] [2], [1] [1] [3], [1] [4 * * [2] [0] [2], [1] [1] [3], [1] [4 * * [2] [0] [2], [1] [1] [3], [1] [4 * * [2] [0] [2], [1], [3] [0], [3] [1], [3] [2], [3] [3] [4] * * [4] [0], [4] [1], [4] [2], [4] [3], [4] [4] */ int count = 0; int r = 0, c = 0;/* r: linha subscrito c: coluna subcript pos [r] [c] corresponde às posições acima*//* atribui a direção, primeiro c ++, depois para baixo r ++, depois esquerda c--, depois up r--*/ final int up = 1; final int down = -1; final int esquerd = 2; final int certo = -2; int dir = direita;/* Direção inicial*/ int cir = 1;/* quantas rodadas de atribuição*/ while (contagem <m* n) {count ++; pos [r] [c] = count;/* atribuição*/ switch (dir) {caso à direita: if (c <n - cir) {/* ainda não há atribuição no lado direito da linha atual*/ c ++; } else {dir = Down; r ++; } quebrar; CASO DO AVISO: se (r <m - cir) {/* ainda não há atribuição abaixo da coluna atual*/ r ++; } else {dir = esquerda; C--; } quebrar; Case esquerdo: se (c> cir-1) {/* ainda não há atribuição no lado esquerdo da linha atual*/ c--; } else {dir = up; r--; } quebrar; Case Up: if (r> cir) {/* Não há atribuição na coluna atual*/ r--; } else {cir ++;/* atribua um círculo*/ dir = direita; C ++; } quebrar; }} System.out.println ("Resultado do teste wulin.com:"); / * Output */ for (int i = 0; i <m; i ++) {for (int j = 0; j <n; j ++) {if (pos [i] [j] <10) {System.out.print (pos [i] [j]+""+""); } else {System.out.print (pos [i] [j] + ""); }} System.out.println (); }}}Resultados em execução:
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.