zoukankan      html  css  js  c++  java
  • Spiral Matrix II

    题目:

    Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

    For example,
    Given n = 3,

    You should return the following matrix:

    [
     [ 1, 2, 3 ],
     [ 8, 9, 4 ],
     [ 7, 6, 5 ]
    ]

    CPP:
    class Solution {
    public:
        vector<vector<int>> generateMatrix(int x) {
            vector<vector<int>> result;
            if (x == 0) {
                return result;
            } else {
                vector<int> v(x);
                for (int i = 0; i < x; i++) {
                    result.push_back(v);
                }
            }
    
            int r = 0; //第几圈
            int i;
            //left to right
            int a = 1;
            while (r < x / 2) {
                for (i = r; i < x - r; i++) {
                    result[r][i] = a;
                    a++;
                }
                //up to down
                for (i = r + 1; i < x - r ; i++) {
                    result[i][x - r-1] = a;
                    a++;
                }
                //right to left
                for (i = x - r - 2; i >= r; i--) {
                    result[x - r-1][i] = a;
                    a++;
                }
                //down to up
                for (i = x - r - 2; i > r; i--) {
                    result[i][r] = a;
                    a++;
                }
                r++;
            }
            if(2*r !=x)
            {
                result[r][r] = a;
            }
            return result;
        }
    };

     python:

     

    class Solution(object):
        def generateMatrix(self,n):
            ans = []
            for x in range(n):
                ans.append([0]*n)
            mini,minj,maxi,maxj = 0,0,n-1,n-1
            num = 1
            
            while maxi >= mini and maxj >= minj:
                #left to right
                for j in range(minj,maxj+1):
                    ans[minj][j] = num
                    num +=1
                mini += 1
                #up to down
                for i in range(mini,maxi+1):
                    ans[i][maxj] = num
                    num +=1
                maxj -= 1
                #right to left 
                for j in range(maxj,minj-1,-1):
                    ans[maxi][j] = num
                    num +=1
                maxi -=1
                #down to up
                for i in range(maxi,mini-1,-1):
                    ans[i][minj] = num
                    num +=1
                minj += 1
            return ans;
            
     
  • 相关阅读:
    《Effective Java》读书笔记
    《Effective Java》读书笔记
    《Effective Java》读书笔记
    使用 @Log4j2 log.error() 打印异常日志
    获取min-max之间的随机数
    跨域问题(CORS / Access-Control-Allow-Origin)
    SnowFlakeId 分布式雪花id算法
    订单入库后异步推送
    查看git HEAD
    Java Http POST/GET 情求
  • 原文地址:https://www.cnblogs.com/wxquare/p/5225871.html
Copyright © 2011-2022 走看看