幾個面試算法題

題目一,

由外向內順時針打印一個方陣的各元素。比如

1  2  3  4

5  6  7  8

9  10 11 12

13  14 15 16

輸出1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

package com.harry;

import org.testng.annotations.Test;

public class testClockwiseOutput { //順時針打印一個矩陣

    public static int[][] produceMatrix(int m,int n){
        int[][] matrix = new int[m][n];
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                matrix[i][j] = n*i + (j+1);
            }
        }

        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                System.out.printf("%-5d", matrix[i][j]);
            }
            System.out.println();
        }
        return matrix;
    }

    private void outputMatrix(int n){
        //        int m = 6;
        int[][] num = produceMatrix(n,n);
        output(num,0,n-1);
        if(n%2 == 1){ //如果是奇數,打印最中心的元素。
            int mid = n/2;
            System.out.print(num[mid][mid]);
        }
        System.out.println();
        System.out.println();
    }

    @Test
    public void test(){
        for(int i=0;i<10;i++){
            outputMatrix(i+1);
        }
    }

    public void output(int[][] num,int start,int end){
        if(start>=end || end<=0)return;
        for(int i=start;i<=end;i++){
            System.out.print(num[start][i]);
            System.out.print(",");
        } for(int i=start+1;i<=end;i++){
            System.out.print(num[i][end]);
            System.out.print(",");
        } for(int i=end-1;i>=start;i--){
            System.out.print(num[end][i]);
            System.out.print(",");
        } for(int i=end-1;i>start;i--){
            System.out.print(num[i][start]);
            System.out.print(",");
        }
        output(num,start+1,end-1);
    }
}

待續。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章