A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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();
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1

查看全部评分

8 个回复

倒序浏览
自娱自乐 嘿嘿!!
回复 使用道具 举报
你这用数组打印的。你试试能不能只用循环打印。别用数组。
回复 使用道具 举报
lockwood 发表于 2015-5-1 09:14
你这用数组打印的。你试试能不能只用循环打印。别用数组。

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

恩恩 是写错了 多谢啦 :handshake
回复 使用道具 举报
怎么在原帖上把错误改过来啊
回复 使用道具 举报
DING                           
回复 使用道具 举报
good  3kx 赞一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马