Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Spiral Matrix II ใน Python


สมมติว่าเรามีจำนวนเต็มบวก n เราต้องสร้างเมทริกซ์สี่เหลี่ยมจัตุรัสที่มีองค์ประกอบ n2 เรียงตามลำดับเกลียว ดังนั้นถ้า n =5 เมทริกซ์จะเป็น −

1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7

ให้เราดูขั้นตอน -

  • set (row1, col1) :=(0, 0) and (row2, col2) :=(n, n) และสร้างเมทริกซ์หนึ่งชื่อ res จากนั้นเติมด้วย 0s และตั้งค่า num :=1
  • ในขณะที่ num <=n2,
    • สำหรับฉันอยู่ในช่วง col1 ถึง col2,
      • res[row1, i] =num, กรณีที่ num ทีละ 1
      • ถ้า num> n2 ให้แตก
    • สำหรับ i ในช่วงแถวที่ 1 + 1 ถึงแถวที่ 2,
      • res[i, col2-1] =num, กรณีที่ num ทีละ 1
      • ถ้า num> n2 ให้แตก
    • สำหรับ i ในช่วง col2 – 2 เหลือ col1 – 1,
      • res[row2 – 1, i] =num, กรณีที่ num ทีละ 1
      • ถ้า num> n2 ให้แตก
    • สำหรับ i ในช่วงแถวที่ 2 – 2 ลงไปที่แถวที่ 1,
      • res[i, col1] =num, กรณีที่ num ทีละ 1
    • เพิ่มแถว 1 ขึ้น 1 ลดแถวที่ 2 ขึ้น 1 เพิ่ม col1 ขึ้น 1 และลด col2 ขึ้น 1
  • ผลตอบแทน

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution(object):
   def generateMatrix(self, n):
      row1 = 0
      col1 = 0
      row2 = n
      col2 = n
      result = [ [0 for i in range(n)] for j in range(n)]
      num = 1
      while num<=n**2:
         for i in range(col1,col2):
            result[row1][i] = num
            num+=1
         if num > n**2:
            break
         for i in range(row1+1,row2):
            result[i][col2-1] = num
            num+=1
         if num > n**2:
            break
         for i in range(col2-2,col1-1,-1):
            result[row2-1][i] = num
            num+=1
         if num > n**2:
            break
         for i in range(row2-2,row1,-1):
            result[i][col1] = num
            num+=1
            row1+=1
            row2-=1
            col1+=1
            col2-=1
            #print(result)
      return result
ob1 = Solution()
print(ob1.generateMatrix(4))

อินพุต

4

ผลลัพธ์

[[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]