暴力求解 但是忽略了三条中的2=3=4的情况
后面写着写着 想了想可以构建一个数组 又觉得占内存 还是暴力解了
public static String bestHand(int[] ranks, char[] suits) { if(suits[0]==suits[1]&&suits[2]==suits[3]&&suits[4]==suits[0]&&suits[0]==suits[2]) { return ("Flush"); } Arrays.sort(ranks); if((ranks[0]==ranks[1]&&ranks[1]==ranks[2])||(ranks[2]==ranks[3]&&ranks[3]==ranks[4])||(ranks[3]==ranks[1]&&ranks[1]==ranks[2])) { return("Three of a Kind");//最开始这里的12345中2=3=4情况被忽略了 } if(ranks[0]==ranks[1]||ranks[2]==ranks[1]||ranks[2]==ranks[3]||ranks[3]==ranks[4]) { return("Pair"); } return("High Card"); }
构建一个计数的数组 更慢了哈哈哈
public String bestHand(int[] ranks, char[] suits) { int[] count= {1,1,1,1,1}; if(suits[0]==suits[1]&&suits[2]==suits[3]&&suits[4]==suits[0]&&suits[0]==suits[2]) { return ("Flush"); } Arrays.sort(ranks); for(int i=1;i<5;i++) { if(ranks[i]==ranks[i-1]) { count[i]=count[i-1]+1; } } Arrays.sort(count); if(count[4]>=3) { return("Three of a Kind");//最开始这里的12345中2=3=4情况被忽略了 } if(count[4]==2) { return("Pair"); } return("High Card"); }
看题解答案 用哈希表{其实是集合吧} 然后想应该用字典更合适 结果人家其实就是用的字典 熟悉一下
public static String bestHand(int[] ranks, char[] suits) { Set<Character> set =new HashSet<Character>(); Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(char suit:suits) { set.add(suit); } if(set.size()==1) { return("Flush"); } for(int rank:ranks) { map.put(rank, map.getOrDefault(rank, 0)+1); } if(map.size()==5) { return("High Card"); } // else if(map.size()==3) {//刚开始还考虑光用尺寸判断 然后发现当size=3可能是3 1 1或者2 2 1 无法判断 // } // for(Map.Entry<Integer,Integer>entry:map.entrySet()) {//只看value就可以把 所以也没必要key-value全取 // System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue()); // } for(int i:map.values()) { if(i>=3) { return("Three of a Kind"); } } return "Pair"; }
标签:map,2347,return,ranks,suits,力扣,int,&&,手牌 From: https://www.cnblogs.com/ayuanjiejie/p/17137749.html