Skip to content

Commit b38dbeb

Browse files
authored
Create next-palindrome-using-same-digits.py
1 parent 82b83cd commit b38dbeb

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Time: O(n)
2+
# Space: O(1)
3+
4+
class Solution(object):
5+
def nextPalindrome(self, num):
6+
"""
7+
:type num: str
8+
:rtype: str
9+
"""
10+
def next_permutation(nums, begin, end):
11+
def reverse(nums, begin, end):
12+
left, right = begin, end-1
13+
while left < right:
14+
nums[left], nums[right] = nums[right], nums[left]
15+
left += 1
16+
right -= 1
17+
18+
k, l = begin-1, begin
19+
for i in reversed(xrange(begin, end-1)):
20+
if nums[i] < nums[i+1]:
21+
k = i
22+
break
23+
else:
24+
reverse(nums, begin, end)
25+
return False
26+
for i in reversed(xrange(k+1, end)):
27+
if nums[i] > nums[k]:
28+
l = i
29+
break
30+
nums[k], nums[l] = nums[l], nums[k]
31+
reverse(nums, k+1, end)
32+
return True
33+
34+
nums = list(num)
35+
if not next_permutation(nums, 0, len(nums)//2):
36+
return ""
37+
for i in xrange(len(nums)//2):
38+
nums[-1-i] = nums[i]
39+
return "".join(nums)

0 commit comments

Comments
 (0)