题目
题目链接:
https://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199
思路
第一步:获取数字上每一个数,组成数组arr 第二步:利用“下一个排列” 问题解题方法来继续作答,步骤: 利用lintcode 52 下一个排列的解放方法 从后往前找,找到第一对(i,j),iJava代码
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ public int nextGreaterElement (int n) { //lintcode上类似的同一个道题52 · 下一个排列 Listll = new ArrayList<>(); while (n > 0) { int mod = n % 10; n = n / 10; ll.add(mod); } int size = ll.size(); int[] arr = new int[size]; for (int i = 0; i < size ; i++) { arr[i] = ll.get(size - i - 1); } //利用lintcode 52 下一个排列的解放方法 //从后往前找,找到第一对(i,j),i = 0 ; i--) { for (int j = size - 1; j > i ; j--) { if (arr[i] < arr[j]) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; Arrays.sort(arr, i + 1, size); String s = ""; for (int i1 : arr) { s += i1; } //这个位置lintcode52是return arr return Integer.valueOf(s); } } } return -1; //这个位置lintcode52是return 排序后的arr } } Go代码
package main import "sort" /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ func nextGreaterElement(n int) int { //类似的题目是lintcode 52下一个排列 ll := []int{} for n > 0 { mod := n % 10 n = n / 10 ll = append(ll, mod) } size := len(ll) arr := make([]int, size) for i := 0; i < size; i++ { arr[i] = ll[size-i-1] } //利用lintcode 52 下一个排列的解放方法 //从后往前找,找到第一对(i,j),i= 0; i-- { for j := size - 1; j > i; j-- { if arr[i] < arr[j] { t := arr[i] arr[i] = arr[j] arr[j] = t arr1 := []int{} if i+1 < size { for k := i + 1; k < size; k++ { arr1 = append(arr1, arr[k]) } } sort.Ints(arr1) //对i+1开始到最后的数字进行排序 ans := 0 for k := 0; k <= i; k++ { ans = ans*10 + arr[k] } for k := 0; k < len(arr1); k++ { ans = ans*10 + arr1[k] } return ans } } } return -1 } PHP代码
//类似的同一道题是lintcode 52 下一个排列 $arr = []; while ($n >0){ $mod = $n%10; $n =intval($n/10); array_unshift($arr,$mod); } //利用lintcode 52 下一个排列的解放方法 //从后往前找,找到第一对(i,j),i=0;$i--){ for($j=$size-1;$j>$i;$j--){ if($arr[$i] < $arr[$j]){ $t = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j]= $t; $arr1 = []; for($k=$i+1;$k<$size;$k++){ array_push($arr1,$arr[$k]); } sort($arr1); //对i+1到size位置的数排序 $ans = 0; for($k=0;$k<=$i;$k++){ $ans = $ans*10+$arr[$k]; } for($k=0;$k $ans =$ans*10+$arr1[$k]; } return $ans; } } } return -1; } C++代码
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param n int整型 * @return int整型 */ int nextGreaterElement(int n) { vectorll; while (n > 0) { ll.push_back(n % 10); n = n / 10; } int size = ll.size(); vector arr(size); for (int i = 0; i < size; i++) { arr[i] = ll[size - i - 1]; } //利用lintcode 52 下一个排列的解放方法 //从后往前找,找到第一对(i,j),i = 0; i--) { for (int j = size - 1; j > i; j--) { if (arr[i] < arr[j]) { int t = arr[i]; arr[i] = arr[j]; arr[j] = t; std::sort(arr.begin() + i + 1, arr.end()); //对i+1到size位置的数排序 int ans = 0; for (int k = 0; k < size; k++) { ans = ans * 10 + arr[k]; } return ans; } } } return -1; } };
还没有评论,来说两句吧...