मान लीजिए कि हमारे पास एक सकारात्मक पूर्णांक n है, हमें सर्पिल क्रम में n2 तत्वों के साथ एक वर्ग मैट्रिक्स उत्पन्न करना होगा। तो अगर n =5, तो मैट्रिक्स होगा -
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
आइए चरणों को देखें -
- सेट (पंक्ति1, col1):=(0, 0) और (पंक्ति2, कॉल2):=(एन, एन), और रेस नामक एक मैट्रिक्स बनाएं, फिर इसे 0s से भरें, और संख्या सेट करें:=1ली>
- जबकि संख्या <=n2,
- मैं के लिए col1 से col2 की सीमा में,
- res[row1, i] =num, incase num by 1
- यदि num> n2, तो ब्रेक करें
- i के लिए पंक्ति 1 + 1 से पंक्ति 2 तक,
- res[i, col2-1] =num, incase num by 1
- यदि num> n2, तो ब्रेक करें
- मैं के लिए col2 - 2 से नीचे col1 - 1,
- . की श्रेणी में
- res[row2 – 1, i] =num, incase num by 1
- यदि num> n2, तो ब्रेक करें
- मैं के लिए पंक्ति 2 – 2 से नीचे पंक्ति 1 तक,
- res[i, col1] =num, incase num by 1
- पंक्ति1 को 1 से बढ़ाएं, पंक्ति2 को 1 से घटाएं, col1 को 1 से बढ़ाएं और col2 को 1 से घटाएं
- मैं के लिए col1 से col2 की सीमा में,
- रिटर्न रेस
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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]]