【发布时间】:2020-07-04 16:49:03
【问题描述】:
我正在尝试使用递归查找给定字符串的等级,但似乎无法以我想要的方式退出递归。我哪里错了?
class Solution {
public static int flag=0;
public static int ans=0;
public static int findRank(String A) {
/* write your solution here */
char[] carr=A.toCharArray();
Arrays.sort(carr);
String suffix=new String(carr);
ArrayList<String> list=new ArrayList<String>();
int rank=0;
rank=generate(rank,"",suffix,list,A);
for(int i=0;i<list.size();i++)
System.out.print(list.get(i)+" ");
return rank;
}
public static int generate(int rank,String prefix,String suffix, ArrayList<String> list,String A){
if(suffix.length()==0){
list.add(prefix);
rank++;
if(prefix.equals(A)){
return rank;
}
}
for(int i=0;i<suffix.length();i++) {
// System.out.println(rank);
return generate(rank,prefix+suffix.charAt(i),suffix.substring(0,i)+suffix.substring(i+1),list, A);
}
return rank;
}
}
这是一个问题: 给定一个字符串,找出该字符串在其按字典顺序排序的排列中的排名。 假设没有字符重复。
例子:
输入:'acb' 输出:2 字母“a”、“c”和“b”的顺序排列:
abc ab 背书 bca 出租车 cba
我试着把它放在可视化器中,下面是它的代码:
import java.util.*;
public class Solution {
public static int flag=0;
public static int ans=0;
public static void main(String args[]) {
/* write your solution here */
String A="dbca";
char[] carr=A.toCharArray();
Arrays.sort(carr);
String suffix=new String(carr);
ArrayList<String> list=new ArrayList<String>();
int rank=0;
rank=generate(rank,"",suffix,list,A);
for(int i=0;i<list.size();i++)
System.out.print(list.get(i)+" ");
System.out.println(rank);
}
public static int generate(int rank,String prefix,String suffix, ArrayList<String> list,String A){
if(suffix.length()==0){
list.add(prefix);
rank++;
if(prefix.equals(A)){
return rank;
}
}
for(int i=0;i<suffix.length();i++){
// System.out.println(rank);
return generate(rank,prefix+suffix.charAt(i),suffix.substring(0,i)+suffix.substring(i+1),list, A);
}
return rank;
}
}
https://cscircles.cemc.uwaterloo.ca/java_visualize/#mode=edit
【问题讨论】:
-
“排名”是什么意思
-
在“abc acb bac bca cab cba”系列中,“acb”的排名为2。
-
嗯,好的。为什么?
-
@Stultuske 这在问题中得到了我满意的解释,并得到了一个例子的支持:排列字符串。对排列进行排序。确定原始字符串的索引(1-开始)。
-
afraah,请应用一致的缩进。
标签: java string recursion permutation