LeetCode #556 Next Greater Element III 下一個(gè)更大元素 III

556 Next Greater Element III 下一個(gè)更大元素 III

Description:
Given a positive integer n, find the smallest integer which has exactly the same digits existing in the integer n and is greater in value than n. If no such positive integer exists, return -1.

Note that the returned integer should fit in 32-bit integer, if there is a valid answer but it does not fit in 32-bit integer, return -1.

Example:

Example 1:

Input: n = 12
Output: 21

Example 2:

Input: n = 21
Output: -1

Constraints:

1 <= n <= 2^31 - 1

題目描述:
給你一個(gè)正整數(shù) n 肤视,請(qǐng)你找出符合條件的最小整數(shù)疗涉,其由重新排列 n 中存在的每位數(shù)字組成,并且其值大于 n 立宜。如果不存在這樣的正整數(shù)穴翩,則返回 -1 探赫。

注意 厦画,返回的整數(shù)應(yīng)當(dāng)是一個(gè) 32 位整數(shù) 牍陌,如果存在滿足題意的答案擎浴,但不是 32 位整數(shù) ,同樣返回 -1 毒涧。

示例 :

示例 1:

輸入:n = 12
輸出:21

示例 2:

輸入:n = 21
輸出:-1

提示:

1 <= n <= 2^31 - 1

思路:

參考LeetCode #31 Next Permutation 下一個(gè)排列
從后往前找到第一個(gè)逆序的數(shù)對(duì)
交換之后將逆序數(shù)對(duì)之后的元素逆序
時(shí)間復(fù)雜度 O(n), 空間復(fù)雜度 O(n)

代碼:
C++:

class Solution 
{
public:
    int nextGreaterElement(int n) 
    {
        string str = to_string(n);
        next_permutation(str.begin(), str.end());
        long num = stol(str);
        return num > INT_MAX or num <= n ? -1 : num;
    }
};

Java:

class Solution {
    public int nextGreaterElement(int n) {
        char[] nums = ("" + n).toCharArray();
        int i = nums.length - 2, j = nums.length - 1;
        while (i >= 0 && nums[i + 1] <= nums[i]) --i;
        if (i < 0) return -1;
        while (j >= 0 && nums[j] <= nums[i]) --j;
        swap(nums, i, j);
        reverse(nums, i + 1);
        try {
            return Integer.parseInt(new String(nums));
        } catch (Exception e) {
            return -1;
        }
    }
    
    private void reverse(char[] nums, int start) {
        int i = start, j = nums.length - 1;
        while (i < j) swap(nums, i++, j--);
    }
    
    private void swap(char[] nums, int i, int j) {
        char temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

Python:

class Solution:
    def nextGreaterElement(self, n: int) -> int:
        nums, m = [x for x in str(n)], len(str(n))
        for i in range(m - 2, -1, -1):
            if nums[i] < nums[i + 1]:
                for j in range(m - 1, i, -1):
                    if nums[j] > nums[i]:
                        nums[i], nums[j] = nums[j], nums[i]
                        nums[i + 1:] = nums[i + 1:][::-1]
                        break
                break
        return result if (result := int(''.join(nums))) < 2 ** 31 and result != n else -1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贮预,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子契讲,更是在濱河造成了極大的恐慌仿吞,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捡偏,死亡現(xiàn)場(chǎng)離奇詭異唤冈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)银伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門你虹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枣申,你說我怎么就攤上這事售葡】春迹” “怎么了忠藤?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長楼雹。 經(jīng)常有香客問我模孩,道長,這世上最難降的妖魔是什么贮缅? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任榨咐,我火速辦了婚禮,結(jié)果婚禮上谴供,老公的妹妹穿的比我還像新娘块茁。我一直安慰自己,他們只是感情好桂肌,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布数焊。 她就那樣靜靜地躺著,像睡著了一般崎场。 火紅的嫁衣襯著肌膚如雪佩耳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天谭跨,我揣著相機(jī)與錄音干厚,去河邊找鬼李滴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蛮瞄,可吹牛的內(nèi)容都是我干的所坯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼挂捅,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼包竹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起籍凝,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤周瞎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饵蒂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體声诸,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年退盯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彼乌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡渊迁,死狀恐怖慰照,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情琉朽,我是刑警寧澤毒租,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站箱叁,受9級(jí)特大地震影響墅垮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耕漱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一算色、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧螟够,春花似錦灾梦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至给郊,卻和暖如春牡肉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淆九。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工统锤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留毛俏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓饲窿,卻偏偏與公主長得像煌寇,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逾雄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容