<?phpclass Solution { /** * 1,2,7,4,3,1 // 从右到左第一个逆序数是2 * 1,2,7,4,3,1 // 从右到左第一个比逆序数大的数是3 * 1,3,7,4,2,1 // 交换2和3 * 1,3,1,2,4,7 // 原2位置后面的数字翻转 * * @param $nums */ public function nextPremutation(&$nums) { $n = count($nums); for ($i = $n - 2; $i >= 0; $i--) { if ($nums[$i + 1] < $nums[$i]) continue; if ($i < 0) break; for ($j = $n - 1; $j >= 0; $j--) { if ($nums[$j] > $nums[$i]) { break; } } $tmp = $nums[$i]; $nums[$i] = $nums[$j]; $nums[$j] = $tmp; $left = $i + 1; $right = $n - 1; $this->reverse($nums, $left, $right); return; } $this->reverse($nums, 0, $n - 1); return; } private function reverse(&$nums, $left, $right) { while($left < $right) { $tmp = $nums[$left]; $nums[$left] = $nums[$right]; $nums[$right] = $tmp; $left++; $right--; } }}$s = [1,2,7,4,3,1];$cls = new Solution();$cls->nextPremutation($s);echo implode(',', $s);