蓝桥杯 扑克序列
AA223344,一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
4A3A2432, 2342A3A4
请填写出所有符合要求的排列中,字典序最小的那个。
例如:
22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
【答案】:2342A3A4
import java.util.HashSet;
import java.util.Set;
public class Main{
public static Set<String> set=new HashSet<>();
public static void main(String[] args) {
String s="AA223344";
char[] chs=s.toCharArray();
f(chs,0);
System.out.println(set);
}
private static void f(char[] chs, int k) {
// TODO 自动生成的方法存根
if(k>=chs.length) {
test(chs);
return;
}
for(int i=k;i<chs.length;i++) {
{char t=chs[i];
chs[i]=chs[k];
chs[k]=t;}
f(chs,k+1);
{char t=chs[i];
chs[i]=chs[k];
chs[k]=t;}
}
}
private static void test(char[] chs) {
// TODO 自动生成的方法存根
String s=new String(chs);//toString返回的是当前对象的内存地址,要用new String得到的才是字符串
if(s.lastIndexOf('A')-s.indexOf('A')!=2) {
return;
}
if(s.lastIndexOf('2')-s.indexOf('2')!=3) {
return;
}
if(s.lastIndexOf('3')-s.indexOf('3')!=4) {
return;
}
if(s.lastIndexOf('4')-s.indexOf('4')!=5) {
return;
}
set.add(s);
}
}
还没有评论,来说两句吧...