题目
题目链接:
https://www.nowcoder.com/practice/50b0b87e50be4944b34cb0f2ce618197?tpId=196&tqId=39375&rp=1&ru=/exam/company&qru=/exam/company&sourceUrl=%2Fexam%2Fcompany&difficulty=undefined&judgeStatus=undefined&tags=&title=%E6%8E%92%E5%88%97
其他刷题网站相同题目:
https://www.lintcode.com/problem/52
思路
解题步骤:
假设数组长度是n
从n-1开始往前找到第一对(i,j nums[i]<[j]),然后交换i,j位置的值,然后排序i+1到n的元素就行
参考答案Java
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型一维数组
*/
public int[] nextPermutation (int[] nums) {
//假设数组长度是n
//从n-1开始往前找到第一对(i,j nums[i]<[j]),然后交换i,j位置的值,然后排序i+1到n的元素就行
if (nums == null || nums.length <= 1) return nums;
int n = nums.length;
for (int i = n - 1; i >= 0; i--) {
for (int j = n - 1; j > i; j--) {
if (nums[i] < nums[j]) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
Arrays.sort(nums, i + 1, n);
return nums;
}
}
}
Arrays.sort(nums);
return nums;
}
}
参考答案Go
package main
import (
"sort"
)
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型一维数组
*/
func nextPermutation(nums []int) []int {
if nums == nil || len(nums) <= 1 {
return nums
}
//假设数组长度是n
//从n-1开始往前找到第一对(i,j nums[i]<[j]),然后交换i,j位置的值,然后排序i+1到n的元素就行
n := len(nums)
for i := n - 1; i >= 0; i-- {
for j := n - 1; j > i; j-- {
if nums[i] < nums[j] {
t := nums[i]
nums[i] = nums[j]
nums[j] = t
//fmt.Println(nums[i+1:])
//fmt.Println("----")
sort.Ints(nums[i+1:])
return nums
}
}
}
sort.Ints(nums)
return nums
}
参考答案PHP
<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @return int整型一维数组
*/
function nextPermutation( $nums )
{
if($nums ==null || count($nums) <=1) return $nums;
//假设数组长度是n
//从n-1开始往前找到第一对(i,j nums[i]<[j]),然后交换i,j位置的值,然后排序i+1到n的元素就行
$n = count($nums);
for($i=$n-1;$i>=0;$i--){
for($j=$n-1;$j>$i;$j--){
if($nums[$i]<$nums[$j]){
$t = $nums[$i];
$nums[$i] = $nums[$j];
$nums[$j] =$t;
$ans1=[];
for($k=0;$k<=$i;$k++){
$ans1[$k] =$nums[$k];
}
$ans2=[];
for($k=$i+1;$k<=$n;$k++){
$ans2[$k] =$nums[$k];
}
sort($ans2);
//var_dump($ans1);
//var_dump($ans2);
$ans = [];
$index = 0;
for($k=0;$k<count($ans1);$k++)
$ans[$index++] = $ans1[$k];
for($k=0;$k<count($ans2);$k++){
if($ans2[$k]!=null){
$ans[$index++] = $ans2[$k];
}
}
//$ans = array_merge($ans1,$ans2);
return $ans;
}
}
}
sort($nums);
return $nums;
}