您的位置:首页 > 其它

对纸牌不分花色的大小排序,排序顺序是2,3,..9,JQKA

2015-07-07 22:46 281 查看
//把字符串转换为整数存储到整数数组中,(有一个特殊的值“10”,占两个字符,整型存储时又只需要分配一个空间,所以用两个索引,i与j.j指向整数数组

里的元素,而i指向字符串里的一个字符,i遇到’1‘则让整数数组存储10,i+2跳到'10'后面的字符上),对整数数组排序,再把整数数组转换为字符串

public class stringfilter {
public static String  zhipaisort(String s){
if(s==null||s.length()==0){
return null;
}
//定义一个变量存储当前字符对应的数值
int value=0;
//10占两个字符在分配整数空间时要减去一个
int count=0;
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='1'||s.charAt(i)=='0'){
count++;
}
}
int[] array=new int[s.length()-count/2];//整数数组存储所有的值
int j=0;//j记录当前指向整形数组的索引
for(int i=0;i<s.length();i++){//i 是指向字符数组的索引
char temp=s.charAt(i);//判断这个字符是10,j,q,k,A这些特殊字符吗
value=temp-'0';//先给赋予一个值,若在“2到9,此值没有问题,其他的更改此值”
if(temp=='1'){
value=10;
i++;
}
if(temp=='J'){
value=11;
}
if(temp=='Q'){
value=12;
}
if(temp=='K'){
value=13;
}
if(temp=='A'){
value=14;
}
array[j]=value;
j++;
}
Arrays.sort(array);
StringBuffer sb=new StringBuffer();
for(int i=0;i<array.length;i++){
if(array[i]>=11){
if(array[i]==11){
sb.append('J');
}
if(array[i]==12){
sb.append('Q');
}
if(array[i]==13){
sb.append('K');
}
if(array[i]==14){
sb.append('A');
}
}else{
sb.append(array[i]);
}

}
return sb.toString();
}

这道题的时间和空间效率都是O(n),不知道有没有更好的办法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: