সমস্যা
একটি লিস্টকে ডান দিকে n পজিশন ঘুরানো। উদাহরণ: [2,4,5,12,90], n=3 → [12,90,2,4,5] (মূল আউটপুটে ভুল ছিল, সঠিকটি এখানে দেওয়া হলো)।
পদ্ধতি ১: লুপ ব্যবহার
def right_rotation(lst, n):
n = n % len(lst) # n লিস্টের দৈর্ঘ্যের চেয়ে বড় হলে
output = []
# শেষ n টি এলিমেন্ট
for i in range(len(lst) - n, len(lst)):
output.append(lst[i])
# বাকি এলিমেন্ট
for i in range(0, len(lst) - n):
output.append(lst[i])
return output
# টেস্ট
A = [11, 22, 33, 44, 55, 66]
print("After rotation:", right_rotation(A, 3))
# আউটপুট: [44, 55, 66, 11, 22, 33]
পদ্ধতি ২: স্লাইসিং (সবচেয়ে পাইথনিক)
def right_rotate_slice(lst, n):
n = n % len(lst)
return lst[-n:] + lst[:-n]
A = [11, 22, 33, 44, 55, 66]
print("After Rotation:", right_rotate_slice(A, 3))
# আউটপুট: [44, 55, 66, 11, 22, 33]
পদ্ধতি ৩: নেগেটিভ ইনডেক্সিং (পদ্ধতি ২-র সংক্ষিপ্ত রূপ)
A = [11, 22, 33, 44, 55, 66]
n = 3
rotated = A[-n:] + A[:-n]
print("After Rotation:", rotated)
# আউটপুট: [44, 55, 66, 11, 22, 33]
তুলনা
| পদ্ধতি | সময় জটিলতা | স্পেস জটিলতা | পাঠযোগ্যতা |
|---|---|---|---|
| লুপ | O(n) | O(n) | মাঝারি |
| স্লাইসিং | O(n) | O(n) | উৎকৃষ্ট (Pythonic) |
বাম দিকে রোটেট (Left Rotate)
def left_rotate(lst, n):
n = n % len(lst)
return lst[n:] + lst[:n]