leetcode做题总结,题目Spiral Matrix I/II 2012/03/24

来源:互联网 发布:知乎 加拿大ee 编辑:程序博客网 时间:2024/06/08 16:24

这种题思路很容易想到,就是编程起来太麻烦,在数组里定位容易写错,现在虽然基本题目都是直接在网站文本框里写,告别IDE,但是还是没法一次性写出来无bug的代码,还是需要调试,有时候还经常while忘了i++,忘记return的小错误,以后要注意。



void visit(int[][] a, int x, int m, int n, LinkedList<Integer> l){                if(m==1&&n==1){             l.add(a[x][x]);            return;        }        if(m<=0||n<=0){             //l.add(a[x][x]);            return;        }        int i=0,j=0;        if(m==1){            while(j<n){                l.add(a[x][x+j]);                j++;            }        }else if(n==1){            while(i<m){                l.add(a[x+i][x]);                i++;            }        }else {            while(j<n){                l.add(a[x][x+j]);                j++;            }            i++;            while(i<m){                l.add(a[x+i][x+n-1]);                i++;        }        i--;        j--;        j--;        while(j>=0){            l.add(a[x+m-1][x+j]);            j--;        }        i--;        while(i>=1){            l.add(a[x+i][x]);            i--;        }        visit(a,x+1,m-2,n-2,l);}    }        public List<Integer> spiralOrder(int[][] matrix) {        LinkedList<Integer> l = new LinkedList<Integer>();        int m=matrix.length;        if(m==0) return l;        int n=matrix[0].length;        visit(matrix,0,m,n,l);        return l;    }


第二题和第一题差不多,第一题是转圈访问第二题时转圈生成,直接用的第一题的代码进行修改即可

void visit(int[][] a, int x, int m, int n, int value){                if(m==1&&n==1){             a[x][x]=value;            return;        }        if(m<=0||n<=0){             //l.add(a[x][x]);            return;        }        int i=0,j=0;        if(m==1){            while(j<n){                a[x][x+j]=value++;                j++;            }        }else if(n==1){            while(i<m){                a[x+i][x]=value++;                i++;            }        }else {            while(j<n){                a[x][x+j]=value++;                j++;            }            i++;            while(i<m){                a[x+i][x+n-1]=value++;                i++;        }        i--;        j--;        j--;        while(j>=0){            a[x+m-1][x+j]=value++;            j--;        }        i--;        while(i>=1){            a[x+i][x]=value++;            i--;        }        visit(a,x+1,m-2,n-2,value);}    }        public int[][] generateMatrix(int n) {        int[][] a = new int[n][n];        int value = 1;        visit(a,0,n,n,value);        return a;    }


0 0
原创粉丝点击