題目:給出乙個正整數,找出這個正整數所有數字全排列的下乙個數。即就是在乙個整數包含數字的全部組合中,找到乙個大於且僅大於原數的新整數。例如:輸入12345,則返回12354。
解題思路:
從後向前檢視逆序區域,找到逆序區域的前一位,也就是數字交換的邊界;
讓逆序區域的前一位和逆序區域中大於它的最小的數字交換位置;
把原來的逆序區域轉為順序狀態。
**實現:
//找到全排列下乙個數
public
static
int[
]findnearestnumber
(int
numbers)
//2.把逆序區域的前一位和逆序區域中剛剛大於它的數字交換位置
int[
] numberscopy= arrays.
copyof
(numbers,numbers.length)
;//複製併入參,避免直接修改入參
exchangehead
(numberscopy,index)
;//3.把原來的逆序區域轉為順序
reverse
(numberscopy,index)
;return numberscopy;
}//找到數字置換的邊界
private
static
intfindtransferpoint
(int
numbers)
}return0;
}//交換位置
private
static
int[
]exchangehead
(int
numbers,
int index)
}return numbers;
}//把原來的逆序區域轉為順序
private
static
int[
]reverse
(int
num,
int index)
return num;
}
leetcode 尋找全排列的下乙個數
給定乙個正整數,實現乙個方法來求出離該整數最近的大於自身的 換位數 什麼是換位數呢?就是把乙個整數各個數字的數字進行全排列,從而得到新的整數。例如53241和23541。題目要求寫乙個方法來尋找最近的且大於自身的換位數。比如下面這樣 輸入12345,返回12354 輸入12354,返回12435 輸...
尋找全排列的下乙個數 Python
一 題目描述 給出乙個數,找出這個正整數所有數字全排列的下乙個數。即 在乙個整數所包含數字的全部組合中,找到乙個大於且僅大於原數的新整數。如 如果輸入12345,則返回12354 如果輸入12354,則返回12435 二 解題思路 首先當這5個數字逆序組合時最大 54321 順序組合時最小 1234...
讀書筆記 漫畫演算法 6 尋找全排列的下乙個數
給出乙個數,求出由每位數形成的所有全排列中,大於此數的最小值 注 我們給出的這個數每位都不同 具體的演算法描述如下 1.從後向前尋找逆序區域,並返回逆序區域的最左側索引 2.將nums index 1 與nums區間 index,nums.length 1 中大於nums index 1 的最小元素...