全排列
给定一个数字n,输出由这个数字每一位所组成的数字中比n大的下一个。
输入:
1234
1243
输出:
1243
1324
思路:
暴力解法,将数字n进行全排列,结果放进TreeSet
中,然后遍历TreeSet
,找到比n大的第一个返回。注意java
中把char s[] = str.toCharArray()
后进行交换,交换完毕后再用String.valueOf(s)
返回全排列。
代码:
import java.util.TreeSet;
public class Solution {
private TreeSet<String> set = new TreeSet();
private String swap(String str, int i, int j){
// toCharArray()变成字符数组后进行交换
char s[] = str.toCharArray();
char tmp = s[i];
s[i] = s[j];
s[j] = tmp;
return String.valueOf(s);
}
private void fullPerm(String str, int i){
//排到最后一位就加入TreeSet
if (i == str.length()){
set.add(str);
return;
}
else {
for (int j = i; j < str.length(); j++){
str = swap(str, i, j);
fullPerm(str, i + 1);
str =swap(str, i, j);
}
return;
}
}
public int next(int num){
String str = String.valueOf(num);
fullPerm(str, 0);
int ans = -1;
for (String res : set){
if (Integer.parseInt(res) > num){
ans = Integer.parseInt(res);
break;
}
}
return ans;
}
}
网友评论