求下一個大數
# 下一個大數
def next_bigger(number):
"""
逆序的原因是: 求下一個數通常都是從末尾開始比較的
:param number:
:return:
"""
reverse_number = str(number)[::-1] # n 為從後往前的列表
print(reverse_number)
try:
# 計算從第1位到第n-1 位數字中, 哪一個前者比後者大,將最小下標付給i
# 之所以加1, 方便下面切片操作
i = min(index + 1 for index in range(len(reverse_number[:-1]))
if reverse_number[index] > reverse_number[index + 1])
print(i)
# 找到比reverse_number[i]大的元素的最小下標
# 上一段程式碼找出相鄰元素中,前者比後者大的元素的下標i
# 下一段程式碼是定位比i下標元素還小的元素位置
j = reverse_number[:i].index(
min([a for a in reverse_number[:i]
if a > reverse_number[i]]))
print(j)
# i就是存在前一個數比後一個數大的元素的最小下標
# reverse_number[i + 1::][::-1] 求出i 之後所有的元素,並通過逆序恢復原來的次序,為何此時i要加1
# i 肯定大於 j
return int(reverse_number[i + 1::][::-1] + reverse_number[j] + ''.join(
sorted(reverse_number[j + 1:i + 1] + reverse_number[:j])))
except:
return -1
if __name__ == '__main__':
# print(next_bigger(12222))
print(next_bigger(10)) # 因為找不到前者比後者大而報錯
# print(next_bigger(12375))
# print(next_bigger(789178917891))
相關文章
- 求完全數個數
- 求最小k個數
- 求三個數的最小公倍數
- 輸入10個整數,求最大數
- 3069 求n個整數的和
- 連求最大公約數都不會,我怕不是上了個假大學
- 用一個巨集實現求兩個數中的最大數
- 求十個連續最小自然數,非素數。
- 求區間不同數的個數【主席樹求解】
- 下一個十年需要的五大IT技能
- Python求一個數的平方根Python
- C# 輸入一個整數,求質因數C#
- shell前一個命令結果作為下一個命令引數
- 快排思想O(N)求第k大數
- 無序陣列求第K大的數陣列
- 1s內控制向某個請求請求的次數
- 杭電OJ 2028求n個數的最小公倍數
- Python求10個數的平均數實戰案例講解!Python
- 求區間不同數的個數【樹狀陣列求解】陣列
- CSS 變數,你的下一個設計利器(Part 1)CSS變數
- 求 10 個整數中的最大值
- 求兩個整數之和——一個寫註釋的新手
- 下一個排列(LeetCode)LeetCode
- 2015 年,我和華大基因立下一個小目標……
- 搶先學鴻蒙(HarmonyOS)2.0,你就是下一個大咖!鴻蒙
- Julia會成為下一個程式設計大語言嗎?程式設計
- 求眾數
- 求陣列中k個數的所有組合陣列
- AI之父:大模型不僅僅是預測下一個符號AI大模型符號
- 中國大灣區:下一個全球醫療創新熱點?
- 下一個大趨勢之DAO:X METAVERSE PRO協議成為數字資產管理的先行者Metaverse協議
- 31. 下一個排列
- 求迴文子序列個數(雖然字串,但是DP)字串
- 快速求完全二叉樹的節點個數二叉樹
- 轉載:求任意2個整數互素的概率
- 求10 個整數中最大值並輸出
- gin框架獲取請求引數的8大方式框架
- 求正整數