1. 程式人生 > >Java面試題(一)

Java面試題(一)

筆者在面試的過程中,遇到的一些面試題目,面試後不管結果如何,都做一下重新梳理

一、2018-11-01 給定矩陣(二維陣列),要求斜向列印

解題思路:列印的下一個元素下標的規律為:橫向座標減1,縱向座標加1,如果該元素存在,則列印輸出,否則跳過。當縱向座標大於0時,開始位置為當前行最後一列元素。

需要注意的是:雖然是雙層迴圈遍歷,但是因為內層迴圈的跳出條件為只打印最後一列,所以解題的時間複雜度為O(n),n為輸入矩陣的規模

    /**
     * 一個二維陣列列印
     * 1,2,3,4
     * 5,6,7,8
     * 9,10,11,12
     *
     * 列印順序為:1,2,5,3,6,9,……
     * 斜對角列印
     */
    @Test
    public void testBytesTest(){
        int[][] arr = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
        // 行
        for (int x=0; x< arr.length;x++){
            // 列
            for (int y=0; y< arr[x].length; y++){
                if (x>0){
                    y = arr[x].length-1;
                }
                int m=x;
                int n=y;
                System.out.print(arr[m][n] +" ");
                while ((m < arr.length -1) && (n< arr[x].length) && (n>0)){
                    System.out.print(arr[m+1][n-1] +" ");
                    m++;
                    n--;
                }
            }
        }
    }