java顺时针螺旋递增矩阵

    技术2022-07-11  100

    java打印顺时针螺旋递增矩阵

    面试题真的是防不胜防,各种基础计算题让老油条捉襟见肘 今天有朋友机试,遇到这道题 发现如果从没遇到过的话,一下碰到真的无解 我自己整整琢磨了快一个小时,才用笨办法弄出来 优化空间还很大,这里只是做个记录

    其中all这个,可以任意给值,最终画出的就是all*all的矩阵,这里以6为示例

    public class TestClockMath { public static void main(String[] args) { int all = 6; //矩阵all*all String arr[][] = new String[all][all]; int x = all; //剩余行 int y = all; //剩余列 int value = 0; int a = 0; //当前行 int b = 0; //当前列 for(;x>0&&y>0;){ int fr = b+y; //向右画 for(;b<fr;b++){ arr[a][b] = (value++) +""; if(b+1 == fr) break ; } a++; //当前行向下推进一行 x--; //剩余行减一 int fd = a+x; //向下画 for(;a<fd;a++){ arr[a][b] = (value++) +""; if(a+1 == fd) break; } b--; //当前列向左推进一列 y--; //剩余列减一 int fl = b-y; //向左画 for(;b>fl;b--){ arr[a][b] = (value++) +""; if(b-1 == fl) break; } a--; //当前行向上推进一行 x--; //剩余行减一 int fu = a-x; //向上画 for(;a>fu;a--){ arr[a][b] = (value++) +""; if(a-1 == fu)break; } b++; //当前列向右推进一列 y--; //剩余列减一 } for(String[] everyLine : arr){ System.out.println(Arrays.toString(everyLine)); } } }

    如果要求是只用数字0-9,比如10用0代替,11用1代替这种,那把所有值全部截取最后一位字符即可

    //arr[a][b] = (value++) +""; String disValue = (value++) +""; arr[a][b] = disValue.substring(disValue.length()-1);

    Processed: 0.011, SQL: 9