黑马程序员技术交流社区

标题: 增强版螺旋矩阵,任意n*m矩阵输出 [打印本页]

作者: LPStone    时间: 2015-4-30 23:52
标题: 增强版螺旋矩阵,任意n*m矩阵输出
本帖最后由 LPStone 于 2015-5-3 22:23 编辑

n*n螺旋矩阵输出详解
增强版螺旋矩阵,任意n*m矩阵输出。
class Test
{
        public static void main(String[] args)
        {
                //int size = 6;
                int [][] arr = new int[8][8];
                getHelixMatrix(arr);
                printArray(arr);
        }

        public static void getHelixMatrix(int[][] arr)
        {
                int n = arr.length;//获取矩阵的阶数
                                int m = arr[0].length;
                int l = n<m?(n + 1)/2 : (m + 1)/2;
                int x = 0, y = 0;
                int k = 1;
                for(int i = 0;i < l;i++)
                {
                        //把顶边存入数组中
                        for(x = i;x <= (m - 1) - i;x++)
                        {
                                arr[y][x] = k++;//注意行和列下标的对应,别搞反了!        
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t");
                                                                if(k > n*m)
                                                                        return;
                        }
                        System.out.println();
                        x--;//for的控制条件x++ 最后给x多加了1 ,在此处需要减去                        

                        //把右边存入数组中
                        for(y = i + 1;y <= (n - 1) - i ;y++)
                        {
                                arr[y][x] = k++;
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t");
                                                                if(k > n*m)
                                                                        return;
                        }
                        System.out.println();
                        y--;//前一个for的控制条件y++ 最后给y多加了1 ,在此处需要减去

                        //把底边存入数组中
                        for(x = (m - 1) - i - 1 ;x >= i;x--)
                        {
                                arr[y][x] = k++;
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t");
                                                                if(k > n*m)
                                                                        return;
                        }
                        System.out.println();
                                                x++;

                                                //把左边存入数组中
                                                 for(y = (n- 1) - i - 1;y >= i + 1;y--)
                        {
                                arr[y][x] = k++;
                                System.out.println("arr["+y+"]["+x+"]="+arr[y][x]+"\t");
                                                                if(k > n*m)
                                                                        return;
                        }
                        System.out.println();
                                                y++;               
                }

        }

        public static void printArray(int [][] arr)
        {
                int n = arr.length;//获取矩阵的阶数
                int m = arr[0].length;
                for(int i = 0;i < n;i++ )
                {
                        for(int j = 0;j < m;j++)
                        {
                                System.out.print(arr[j]+"\t");
                        }
                        System.out.println();
                }
        }
}


作者: LPStone    时间: 2015-4-30 23:54
自娱自乐 嘿嘿!!
作者: lockwood    时间: 2015-5-1 09:14
你这用数组打印的。你试试能不能只用循环打印。别用数组。
作者: LPStone    时间: 2015-5-1 09:45
lockwood 发表于 2015-5-1 09:14
你这用数组打印的。你试试能不能只用循环打印。别用数组。

看到这道题的时候还没学到数组,想了很久也想不出来。。。
作者: Oh.Ba    时间: 2015-5-1 13:01
倒数第二句System.out.print(arr[j]+"\t");,应该为System.out.print(arr[i][j]+"\t");
作者: LPStone    时间: 2015-5-3 22:22
Oh.Ba 发表于 2015-5-1 13:01
倒数第二句System.out.print(arr[j]+"\t");,应该为System.out.print(arr[j]+"\t");

恩恩 是写错了 多谢啦 :handshake
作者: LPStone    时间: 2015-5-3 22:24
怎么在原帖上把错误改过来啊
作者: 付长云    时间: 2015-5-3 23:41
DING                           
作者: 苟苟    时间: 2015-5-4 00:10
good  3kx 赞一个




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2