java實(shí)現(xiàn)轉(zhuǎn)圈打印矩陣算法
本文實(shí)例為大家分享了java實(shí)現(xiàn)轉(zhuǎn)圈打印矩陣的具體代碼,供大家參考,具體內(nèi)容如下
給定一個(gè)整形矩陣Matrix,請(qǐng)按照順時(shí)針方向轉(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 {
/*
* 給定一個(gè)整形矩陣Matrix,請(qǐng)按照順時(shí)針方向轉(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
//初始化一個(gè) 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) {
//子矩陣只有一行時(shí)
for(int i=tC;i<=dC;i++) {
System.out.print(matrix[tR][i]+" ");
}
}else if(tC==dC) {
//子矩陣只有一列時(shí)
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--;
}
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- java實(shí)現(xiàn)順時(shí)針打印矩陣
- Java順時(shí)針打印矩陣
- java編程題之順時(shí)針打印矩陣
- Java編程實(shí)現(xiàn)打印螺旋矩陣實(shí)例代碼
- Java實(shí)現(xiàn)的打印螺旋矩陣算法示例
- java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法
- Java實(shí)現(xiàn)的求逆矩陣算法示例
- Java實(shí)現(xiàn)輸出回環(huán)數(shù)(螺旋矩陣)的方法示例
- Java實(shí)現(xiàn)矩陣加減乘除及轉(zhuǎn)制等運(yùn)算功能示例
- Java實(shí)現(xiàn)的按照順時(shí)針或逆時(shí)針方向輸出一個(gè)數(shù)字矩陣功能示例
- java實(shí)現(xiàn)的順時(shí)針/逆時(shí)針打印矩陣操作示例
相關(guān)文章
Java設(shè)計(jì)模式中單一職責(zé)原則詳解
這篇文章主要介紹了Java設(shè)計(jì)模式中單一職責(zé)原則詳解,單一職責(zé)原則 (SRP) 是軟件設(shè)計(jì)中的一個(gè)重要原則,它要求每個(gè)類只負(fù)責(zé)一個(gè)職責(zé),需要的朋友可以參考下2023-05-05
SpringBoot后端數(shù)據(jù)校驗(yàn)實(shí)戰(zhàn)操作指南
在項(xiàng)?開發(fā)中,對(duì)于前端提交的表單,后臺(tái)接?接收到表單數(shù)據(jù)后,為了保證程序的嚴(yán)謹(jǐn)性,通常后端會(huì)加?業(yè)務(wù)參數(shù)的合法校驗(yàn)操作來避免程序的?技術(shù)性?bug,這篇文章主要給大家介紹了關(guān)于SpringBoot后端數(shù)據(jù)校驗(yàn)的相關(guān)資料,需要的朋友可以參考下2022-07-07
基于logback 實(shí)現(xiàn)springboot超級(jí)詳細(xì)的日志配置
java web 下有好幾種日志框架,比如:logback,log4j,log4j2(slj4f 并不是一種日志框架,它相當(dāng)于定義了規(guī)范,實(shí)現(xiàn)了這個(gè)規(guī)范的日志框架就能夠用 slj4f 調(diào)用)。這篇文章主要介紹了基于logback springboot超級(jí)詳細(xì)的日志配置,需要的朋友可以參考下2019-06-06
SpringBoot2.7.14整合redis7的詳細(xì)過程
這篇文章主要介紹了SpringBoot2.7.14整合redis7的詳細(xì)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2023-10-10

