[ LeetCode] Next Permutation(又是我 TAT……已哭晕) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
whalegia
V2EX    程序员

[ LeetCode] Next Permutation(又是我 TAT……已哭晕)

  •  
  •   whalegia 2014-12-05 09:12:21 +08:00 5364 次点击
    这是一个创建于 3987 天前的主题,其中的信息可能已经有所发展或是发生改变。
    自从开始做 LeetCode 心里就住了几十个小人在哭每一个都是做不对或者做不出来痛哭流涕滚去扒别人代码留在我心里的。
    然后这次直接题目都看不懂了……TAT

    原题:
    Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
    我的理解是:
    找出用同样数字排列里,刚好比输入大的那一个。

    但是我看讨论里面有个人说:
    1243 应该变成 1342。
    但是比 1243 大的还有 1324 啊??1324 还比 1342 小,为什么答案是 1342 而不是 1324?
    同时这个人在讨论里也提到了,要把右半部分排一下序,1342不是很明显右边还没有排序吗?=。=
    https://oj.leetcode.com/discuss/17631/share-my-python-code-and-explain-how-to-get-the-solution



    我还在 github 上找了另一个答案,给的注释也是要
    Find the largest l such that num[k] < num[l] (if k exists)
    为什么不是
    Find the smallest l but also required num[k] < num[l]
    ???




    /痛哭流涕退下
    12 条回复    2014-12-05 14:42:17 +08:00
    tangdibupt
        1
    tangdibupt  
       2014-12-05 09:45:17 +08:00   1
    可以这样想解法:
    1. 寻找第一个 digit[i] < digit[i+1],
    2, 从Length-1到i+1, 寻找最小的满足digit[x]<digit[i]的值, 记录x,
    3, sort x+1到Length-1, 获得next permutation。
    rrfeng
        2
    rrfeng  
       2014-12-05 10:09:49 +08:00   1
    用一个数组来排序,
    从末位数字起,插入法插入排序数组

    如果发现数字比排序数组中的最大数字小,那么就得到答案了:
    按照下列顺序摆放数字:
    未参与排序的部分不动,排序数组最大值,排序数字从小到大。
    whalegia
        3
    whalegia  
    OP
       2014-12-05 11:37:08 +08:00
    @tangdibupt
    我觉得,好像不是寻找第一个 digit[i] < digit[i+1],而是寻找最靠右的 i ,并且满足digit[i] < digit[i+1] 这个条件吧?

    然后我还想请问一下,1243 的 next permutation 到底应该是 1324 还是 1342 呀???
    jox
        4
    jox  
       2014-12-05 13:22:26 +08:00   1
    1243的下一个字典序是1324没错的,这道题描述的有问题,如果按照这道题的描述,例子1243应该得到结果1324.

    算法:
    1. 从右向左扫描,找到第一个i满足条件: num[i] > num[i - 1],如果找不到,那么当前序列就是最大序列,直接翻转得到结果
    2. 从右向左扫描,找到第一个j满足条件:num[j] > num[i - 1],这个j一定存在,因为num[i]就大于num[i - 1]
    3. num[j]和num[i - 1] 互换位置
    4. 翻转从i到最后一个数字的序列得到结果

    你给的那个python的算法自己都解释不清,他说sort right,结果也没sort right,我反正是没看懂。
    proudzhu
        5
    proudzhu  
       2014-12-05 13:46:43 +08:00   1
    @jox 我觉得描述没啥问题啊。有啥问题?
    jox
        6
    jox  
       2014-12-05 13:53:07 +08:00   1
    @proudzhu 他说是lexicographically next greater permutation of numbers,如果按照这个描述,1243应该得到结果1324,要么是描述有问题,要么是给的例子有问题。
    jakwings
        7
    jakwings  
       2014-12-05 13:58:48 +08:00   1
    「lexicographically」和字符串的比较有关,再查查ASCII表就知道数字是按0到9升序排列的,理解了这个就好理解其它了。
    proudzhu
        8
    proudzhu  
       2014-12-05 14:11:26 +08:00   1
    @jox 关键是问题的例子不是这个啊。
    https://oj.leetcode.com/discuss/17631/share-my-python-code-and-explain-how-to-get-the-solution
    讨论里的谁知道是对的还是错的。这个链接里代码是对的,1243得到结果就是1324,不是他说的1342,自己跑跑就知道了,吓了我一跳。。。
    proudzhu
        9
    proudzhu  
       2014-12-05 14:12:35 +08:00   1
    @jox PS:你们写都是直接在网页上写的吗,都不用本地 IDE?
    jox
        10
    jox  
       2014-12-05 14:17:19 +08:00   1
    @proudzhu 我晕,我没去看这个问题,也没看那个python的代码,我以为lz说的是问题给的例子呢
    jox
        11
    jox  
       2014-12-05 14:19:45 +08:00   1
    @proudzhu 我不使用leetcode,我一般都是需要什么算法的话直接去翻算法的资料,这个leetcode应该是为了方便应付找工作时候的“考试”,我暂时没有这种需求
    tangdibupt
        12
    tangdibupt  
       2014-12-05 14:42:17 +08:00   1
    @whalegia
    之前没表述清楚,第一个是从右算起。
    另外,应该是1324
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     957 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 19:41 PVG 03:41 LAX 11:41 JFK 14:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86