java實現(xiàn)轉(zhuǎn)圈打印矩陣算法
本文實例為大家分享了java實現(xiàn)轉(zhuǎn)圈打印矩陣的具體代碼,供大家參考,具體內(nèi)容如下
給定一個整形矩陣Matrix,請按照順時針方向轉(zhuǎn)圈的方式,輸入(打?。┰刂?。
例如:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
輸出結(jié)果為:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
要求:額外空間復(fù)雜度為O(1)
JAVA代碼如下:
package com.bean.algorithmexec;
public class MatrixDemo {
/*
* 給定一個整形矩陣Matrix,請按照順時針方向轉(zhuǎn)圈的方式,輸入(打印)元素值。
* 例如:
* 1 2 3 4
* 5 6 7 8
* 9 10 11 12
* 13 14 15 16
* 輸出結(jié)果為:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10
*
* 要求:額外空間復(fù)雜度為O(1)
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
//初始化一個 4*4的整形矩陣,從第一行第一列從左向右,第二行,第三行,直到第四行依次賦值 1,2,...16.
int[][] matrixDemo=new int[4][4];
matrixDemo=createMatrix();
printMatrix(matrixDemo);
//轉(zhuǎn)圈打印
spiralOrderPrint(matrixDemo);
}
private static int[][] createMatrix() {
// TODO Auto-generated method stub
int matrix[][]=new int[4][4];
int k=1;
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
matrix[i][j]=k;
k++;
}
}
return matrix;
}
//順序打印矩陣元素
private static void printMatrix(int[][] matrix) {
for(int i=0;i<4;i++) {
for(int j=0;j<4;j++) {
System.out.print(matrix[i][j]+"\t");
}
System.out.println();
}
}
//轉(zhuǎn)圈打印
private static void spiralOrderPrint(int[][] matrix) {
int tR=0;
int tC=0;
int dR=matrix.length-1;
int dC=matrix[0].length-1;
while(tR<=dR && tC<=dC) {
printEdge(matrix, tR++, tC++, dR--,dC--);
}
}
private static void printEdge(int[][] matrix, int tR, int tC, int dR, int dC) {
// TODO Auto-generated method stub
if(tR==dR) {
//子矩陣只有一行時
for(int i=tC;i<=dC;i++) {
System.out.print(matrix[tR][i]+" ");
}
}else if(tC==dC) {
//子矩陣只有一列時
for(int i=tR;i<=dR;i++){
System.out.print(matrix[i][tC]+" ");
}
}else {
//一般情況
int curC=tC;
int curR=tR;
while(curC!= dC) {
System.out.print(matrix[tR][curC]+" ");
curC++;
}
while(curR!= dR) {
System.out.print(matrix[curR][dC]+" ");
curR++;
}
while(curC!= tC) {
System.out.print(matrix[dR][curC]+" ");
curC--;
}
while(curR!= tR) {
System.out.print(matrix[curR][tC]+" ");
curR--;
}
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot后端數(shù)據(jù)校驗實戰(zhàn)操作指南
在項?開發(fā)中,對于前端提交的表單,后臺接?接收到表單數(shù)據(jù)后,為了保證程序的嚴(yán)謹(jǐn)性,通常后端會加?業(yè)務(wù)參數(shù)的合法校驗操作來避免程序的?技術(shù)性?bug,這篇文章主要給大家介紹了關(guān)于SpringBoot后端數(shù)據(jù)校驗的相關(guān)資料,需要的朋友可以參考下2022-07-07
基于logback 實現(xiàn)springboot超級詳細(xì)的日志配置
java web 下有好幾種日志框架,比如:logback,log4j,log4j2(slj4f 并不是一種日志框架,它相當(dāng)于定義了規(guī)范,實現(xiàn)了這個規(guī)范的日志框架就能夠用 slj4f 調(diào)用)。這篇文章主要介紹了基于logback springboot超級詳細(xì)的日志配置,需要的朋友可以參考下2019-06-06
SpringBoot2.7.14整合redis7的詳細(xì)過程
這篇文章主要介紹了SpringBoot2.7.14整合redis7的詳細(xì)過程,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-10-10

