Java I';我试图用递归法找到给定字符串的秩
我试图使用递归查找给定字符串的秩,但似乎无法按照我想要的方式从递归中走出来。我哪里出错了?Java I';我试图用递归法找到给定字符串的秩,java,string,recursion,permutation,Java,String,Recursion,Permutation,我试图使用递归查找给定字符串的秩,但似乎无法按照我想要的方式从递归中走出来。我哪里出错了? 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(); Arr
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;
}
}
类解决方案{
公共静态int标志=0;
公共静态int ans=0;
公共静态整数(字符串A){
/*在这里写下你的解决方案*/
char[]carr=A.toCharArray();
数组。排序(carr);
字符串后缀=新字符串(carr);
ArrayList=新建ArrayList();
int秩=0;
秩=生成(秩,“,后缀,列表,A);
for(int i=0;ifor循环使您在找到第一个置换后结束递归,这就是您总是返回1的原因
您应该做的是在找到要查找的置换后结束递归。例如,如果您的递归方法将返回一个boolean
标志而不是int
,则可以这样做
递归方法返回后,列表的长度将是您要查找的排名:
public static int findRank(String A)
{
char[] carr=A.toCharArray();
Arrays.sort(carr);
String suffix=new String(carr);
ArrayList<String> list=new ArrayList<String>();
generate("",suffix,list,A);
for(int i=0;i<list.size();i++)
System.out.print(list.get(i)+" ");
return list.size();
}
public static boolean generate(String prefix,String suffix, ArrayList<String> list,String A)
{
if(suffix.length()==0){
list.add(prefix);
return (prefix.equals(A));
}
for(int i=0;i<suffix.length();i++) {
if (generate(prefix+suffix.charAt(i),suffix.substring(0,i)+suffix.substring(i+1),list, A)) {
return true;
}
}
return false;
}
public static int(字符串A)
{
char[]carr=A.toCharArray();
数组。排序(carr);
字符串后缀=新字符串(carr);
ArrayList=新建ArrayList();
生成(“”,后缀,列表,A);
for(int i=0;ifor循环使您在找到第一个置换后结束递归,这就是您总是返回1的原因
您应该做的是在找到要查找的置换后结束递归。例如,如果您的递归方法将返回一个boolean
标志而不是int
,则可以这样做
递归方法返回后,列表的长度将是您要查找的排名:
public static int findRank(String A)
{
char[] carr=A.toCharArray();
Arrays.sort(carr);
String suffix=new String(carr);
ArrayList<String> list=new ArrayList<String>();
generate("",suffix,list,A);
for(int i=0;i<list.size();i++)
System.out.print(list.get(i)+" ");
return list.size();
}
public static boolean generate(String prefix,String suffix, ArrayList<String> list,String A)
{
if(suffix.length()==0){
list.add(prefix);
return (prefix.equals(A));
}
for(int i=0;i<suffix.length();i++) {
if (generate(prefix+suffix.charAt(i),suffix.substring(0,i)+suffix.substring(i+1),list, A)) {
return true;
}
}
return false;
}
public static int(字符串A)
{
char[]carr=A.toCharArray();
数组。排序(carr);
字符串后缀=新字符串(carr);
ArrayList=新建ArrayList();
生成(“”,后缀,列表,A);
对于(int i=0;i)系列“abc acb bac bca cab cba”中的“秩”是什么意思,“acb”的秩应该是2.ehm,好吗?为什么?@Stultuske在问题中解释得令我满意,并通过一个示例加以支持:排列字符串。排序排列。确定索引(1-开始)对于原始string.afraah,请使用一致的缩进。在“abc acb bac bca cab cba”系列中,“acb”的排名是2.ehm,这是什么意思?为什么?@Stultuske在问题中解释得让我满意,并通过一个示例得到支持:排列字符串。排序排列。确定索引(1-起始)的原始字符串。afraah,请应用一致的缩进。