java實(shí)現(xiàn)轉(zhuǎn)圈打印矩陣算法
本文實(shí)例為大家分享了java實(shí)現(xiàn)轉(zhuǎn)圈打印矩陣的具體代碼,供大家參考,具體內(nèi)容如下
給定一個(gè)整形矩陣Matrix,請按照順時(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,請按照順時(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--;
}
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(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解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換?
這篇文章主要介紹了基于Java解決華為機(jī)試實(shí)現(xiàn)整數(shù)與IP地址間的轉(zhuǎn)換,文章舉例說明圍繞文章主題展開相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-02-02
Java基于logback?MessageConverter實(shí)現(xiàn)日志脫敏方案分析
本文介紹了一種日志脫敏方案,即基于logbackMessageConverter和正則匹配的方法,該方法的優(yōu)點(diǎn)是侵入性低,工作量少,只需修改xml配置文件,適用于老項(xiàng)目,感興趣的朋友跟隨小編一起看看吧2024-10-10
java獲取文件擴(kuò)展名的方法小結(jié)【正則與字符串截取】
這篇文章主要介紹了java獲取文件擴(kuò)展名的方法,結(jié)合實(shí)例形式分析了使用正則與字符串截取兩種獲取擴(kuò)展名的操作技巧,需要的朋友可以參考下2017-01-01
SpringRetry重試機(jī)制之@Retryable注解與重試策略詳解
本文將詳細(xì)介紹SpringRetry的重試機(jī)制,特別是@Retryable注解的使用及各種重試策略的配置,幫助開發(fā)者構(gòu)建更加健壯的應(yīng)用程序,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
Spring Boot 與 Kotlin 使用Redis數(shù)據(jù)庫的配置方法
Redis是目前業(yè)界使用最廣泛的內(nèi)存數(shù)據(jù)存儲。下面通過本文給大家介紹Spring Boot 與 Kotlin 使用Redis數(shù)據(jù)庫的配置方法,感興趣的朋友一起看看吧2018-01-01
Spring Boot Actuator未授權(quán)訪問漏洞的問題解決
Spring Boot Actuator 端點(diǎn)的未授權(quán)訪問漏洞是一個(gè)安全性問題,可能會導(dǎo)致未經(jīng)授權(quán)的用戶訪問敏感的應(yīng)用程序信息,本文就來介紹一下解決方法,感興趣的可以了解一下2023-09-09
springboot通過注解、接口創(chuàng)建定時(shí)任務(wù)詳解
使用SpringBoot創(chuàng)建定時(shí)任務(wù)其實(shí)是挺簡單的,這篇文章主要給大家介紹了關(guān)于springboot如何通過注解、接口創(chuàng)建這兩種方法實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)資料,需要的朋友可以參考下2021-07-07

