ধরুন আমাদের একটি ধনাত্মক পূর্ণসংখ্যা n আছে, আমাদের সর্পিল ক্রমে n2 উপাদান সহ একটি বর্গ ম্যাট্রিক্স তৈরি করতে হবে। তাই যদি n =5 হয়, তাহলে ম্যাট্রিক্স হবে −
1 | 2 | 3 | 4 |
12 | 13 | 14 | 5 |
11 | 16 | 15 | 6 |
10 | 9 | 8 | 7 |
আসুন ধাপগুলো দেখি -
- সেট করুন (সারি 1, col1) :=(0, 0) এবং (row2, col2) :=(n, n), এবং res নামে একটি ম্যাট্রিক্স তৈরি করুন, তারপর 0s দিয়ে পূরণ করুন এবং সংখ্যা সেট করুন :=1<
- যখন num <=n2,
- আমি col1 থেকে col2 পরিসরে,
- res[row1, i] =num, incase Num by 1
- যদি num> n2 হয়, তাহলে বিরতি করুন
- আমি সারি 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 দ্বারা কমান, 1 দ্বারা col1 বাড়ান এবং 1 দ্বারা col2 হ্রাস করুন
- আমি 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]]