46. 全排列

46. 全排列

给定一个 没有重复 数字的序列,返回其所有可能的全排列。

示例:

输入: [1,2,3]
输出:

[
  [1,2,3],
  [1,3,2],
  [2,1,3],
  [2,3,1],
  [3,1,2],
  [3,2,1]
]

代码如下:

class Solution {
    /**
     * @param Integer[] $nums
     * @return Integer[][]
     */
    function permute($nums) {
        $count = count($nums);
        if ($count == 1) return [$nums];
        sort($nums);
        $last = $x = $count - 1;
        $result[] = $nums;
        while (true) {
            $y = $x--;
            if ($nums[$x] < $nums[$y]) {
                $z = $last;
                while ($nums[$x] > $nums[$z]) {
                    $z--;
                }
                list($nums[$x], $nums[$z]) = array($nums[$z], $nums[$x]);
                for ($i = $last; $i > $y; $i--, $y++) {
                    list($nums[$i], $nums[$y]) = array($nums[$y], $nums[$i]);
                }
                $x = $last;
                $result[] = $nums;
            }
            if ($x == 0) {
                break;
            }
        }
        return $result;
    }
}

本文链接:https://itarvin.com/detail-100.aspx

登录或者注册以便发表评论

登录

注册