FIRE Wannabeの備忘録

毎月積立。

【LeetCode】No.31: Next Permutation

31題目。次の順列/置換。

 

整数のリストが与えられて、それをlexigographycallyにnextなもの並べ替える。つまり辞書的な意味で次の順番のものに組み合わせに並び替えるようなアルゴリズムです。またもin-placeで処理せよかつ、何もreturnせずただ単に並べ替えるだけというお達し付き。また、数字の順列がもうそれ以上並べ替えられない時は辞書的な意味でのに一番最初の順番の物に。

 

例:[1, 2, 3] -> [1, 3, 2]、[3, 2, 1] -> [1, 2, 3]、[1, 1, 5] -> [1, 5, 1]

 

パッと問題文を読んで考えたのは「数字なので大小を比べる」、「次の順列ということはリストのインデックス1と2を入れ替えればいいのかな」くらい。3, 2, 1のようにもう並び替えられないものを1, 2, 3のように初期化する方法はsort()でしょうか。

 

結果・・全然ダメでしたーw

f:id:ed_hen:20200607001830p:plain

no31

相変わらず近視眼的な実装しかできないのは悔しい。そもそもの考えたことが的外れなのも。今見直すとlen(nums) <=3以上のやつどういう思考してたんだ・・。nums==3しか考えてませんね。思っていることはなんとなくではあるがコードにかけるようになってきてる点はポジティブに受け止めたいところ。

 

以下読みましたが、、う〜ん。これは自分で実装できるようになるまでにはまだ時間かかるやつ。

https://leetcode.com/problems/next-permutation/solution/

 

あとやっててつくづく思いますが、素人ながらに綺麗なコードだなあというの、ユーザーを見ると中国人の可能性が割と高い。あの国の人材はやはりこう言う点でほんと強いな・・としみじみ。見習いたいところ。

 

Problems 達成度: 31/1469*