关闭

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

243人阅读 评论(0) 收藏 举报
分类:

//把字符串转换为整数存储到整数数组中,(有一个特殊的值“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),不知道有没有更好的办法

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:318次
    • 积分:23
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章存档
    最新评论