当前位置: 代码迷 >> J2SE >> 关于扑克牌序列的算法,求算法思路
  详细解决方案

关于扑克牌序列的算法,求算法思路

热度:38   发布时间:2016-04-23 19:37:01.0
关于扑克序列的算法,求算法思路
求这道题的思路,不知道从何下手。如果给出源码,我也不介意的,答案:2342A3A4。谢谢了
------解决思路----------------------

public class Checking {
public static void main(String args[]) throws Exception {

long startTime = System.currentTimeMillis();
String str[] = { "1", "2", "3", "4" };
arrange(str, 0, str.length);
StringBuilder sb = new StringBuilder();
for (String o : item) {
{
for (String e : item) {
sb = new StringBuilder(o).insert(e.indexOf(e
.substring(0, 1))
+ Integer.valueOf(e.substring(0, 1)), e.substring(
0, 1));
sb = sb.insert(sb.indexOf(e.substring(1, 2))
+ Integer.valueOf(e.substring(1, 2)) + 1, e
.substring(1, 2));
sb = sb.insert(sb.indexOf(e.substring(2, 3))
+ Integer.valueOf(e.substring(2, 3)) + 1, e
.substring(2, 3));
sb = sb.insert(sb.indexOf(e.substring(3, 4))
+ Integer.valueOf(e.substring(3, 4)) + 1, e
.substring(3, 4));
if (sb.substring(0, 8).indexOf("-") == -1
&& sb.indexOf("1")
- sb.indexOf("1", sb.indexOf("1") + 1) == -2
&& sb.indexOf("2")
- sb.indexOf("2", sb.indexOf("2") + 1) == -3
&& sb.indexOf("3")
- sb.indexOf("3", sb.indexOf("3") + 1) == -4
&& sb.indexOf("4")
- sb.indexOf("4", sb.indexOf("4") + 1) == -5) {
System.out.println(sb.toString().replaceAll("-", "")
.replace("1", "A"));

}
}
}
}

long endTime = System.currentTimeMillis();
float excTime = (float) (endTime - startTime) / 1000;
System.out.println("执行时间:" + excTime + "s");
}

static List<String> item = new ArrayList<String>();

public static void swap(String[] str, int i, int j) {
String temp = new String();
temp = str[i];
str[i] = str[j];
str[j] = temp;
}

public static void arrange(String[] str, int st, int len) {
StringBuilder sb = new StringBuilder(4);
if (st == len - 1) {
for (int i = 0; i < len; i++) {
sb.append(str[i]);
}
item.add(sb.toString() + "-----------");
} else {
for (int i = st; i < len; i++) {
swap(str, st, i);
arrange(str, st + 1, len);
swap(str, st, i);
}
}
}
}


不知道还有什么好方法 ,上面的时间复杂度不是太好

全排列
------解决思路----------------------

import java.util.ArrayList;

public  class Sort{
public static void main(String[] args){

Poker[] pokers = new Poker[]{
new Poker("A"),new Poker("A"),new Poker("2"),new Poker("2"),new Poker("3"),new Poker("3"),new Poker("4"),new Poker("4")
};
String[] contents = Poker.pokerSort(pokers);
process(contents);
}

// method process start //
private static void process(String[] contents){
//判断有效性.
String regex_1 = ".*A.A.*";
String regex_2 = ".*2..2.*";
String regex_3 = ".*3...3.*";
String regex_4 = ".*4....4.*";

for(int i = 0 ; i < contents.length ; i ++){
boolean b = contents[i].matches(regex_1) && contents[i].matches(regex_2) && contents[i].matches(regex_3) && contents[i].matches(regex_4);
if(b){
System.out.println(contents[i]);
}
}
}
// method process end //

//----Start Class Poker ---//
private static class Poker{
int content = 0;

public Poker(int content){
if(content > 14 
------解决思路----------------------
 content < 0){
System.err.println("Unvalid Pocker");
System.exit(1);
}
this.content = content;
}

public Poker(String content){
if(content.equals("A")){
this.content = 1;
}else if(content.equals("J")){
this.content = 11;
}else if(content.equals("Q")){
this.content = 12;
}else if(content.equals("K")){
this.content = 13;
}else{
try{
this.content = Integer.valueOf(content);
if(this.content > 13 
------解决思路----------------------
 this.content <= 0){
throw new NumberFormatException("Unvalid Pocker");
}
}catch(NumberFormatException e){
System.err.println(e.getMessage());
System.exit(1);
}
}
}

public int getPokerIntValue(){
return this.content;
}

public String getPokerStringValue(){
String result = null;
switch(content){
case 1:
result = "A";
break;
case 11:
result = "J";
break;
case 12:
result = "Q";
break;
case 13:
result = "K";
break;
default:
result = "" + content;
break;
}

return result;
}

public static String[] pokerSort(Poker[] pokers){
//这里方法返回扑克的排列组合.
String[] contents =  new String[pokers.length];
for(int i = 0 ; i < pokers.length ; i ++){
contents[i] = pokers[i].getPokerStringValue();
}
return pokerSort(contents);
}

private static ArrayList<String> pokerContentList = new ArrayList<String>();

private static String[] pokerSort(String[] contents){
sort(contents,0);
return pokerContentList.toArray(new String[0]);
}

public static void release(){
pokerContentList = new ArrayList<String>();
}

public static ArrayList<String> getPokerContentList(){
return pokerContentList;
}


private static void sort(String[] contents,int i){
if(i < 0 
------解决思路----------------------
 i > contents.length){
System.err.println("Unknown Parameter!");
return;
}

if(i == contents.length){
addContent(contents);
return;
}

String temp = null;
for(int j = i ; j < contents.length ; j ++){
temp = contents[j];
contents[j] = contents[i];
contents[i] = temp;
sort(contents,i + 1);
temp = contents[j];
contents[j] = contents[i];
contents[i] = temp;

}
}

private static void addContent(String[] contents){
String result = "";
for(int i = 0 ; i< contents.length ; i ++){
result += contents[i];
}

if(!pokerContentList.contains(result)){
pokerContentList.add(result);
}
}
  


}

// ----End Class Poker -----//

}
  相关解决方案