Question
Alice has a hand of cards, given as an array of integers.
Now she wants to rearrange the cards into groups so that each group is size W, and consists of W consecutive cards.
Return true if and only if she can.
Solution
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class HandStr {
public static void main(String[] args) {
// TODO Auto-generated method stub
int []hand= {1,2,3,6,2,3,4,7,8};
System.out.println(isNStraightHand(hand,3));
}
public static boolean isNStraightHand(int[] hand, int W) {
if(hand.length%W!=0){
return false;
}
Arrays.sort(hand);
List<Integer>ls=new ArrayList();
for(int i=0;i<hand.length;i++) {
ls.add(hand[i]);
}
return isNS(ls,W);
}
private static boolean isNS(List<Integer> ls, int w) {
// TODO Auto-generated method stub
int num=Collections.min(ls);
for(int j=0;j<w;j++) {
if(!ls.contains(num)) {
return false;
}
ls.remove(ls.indexOf(num));
num++;
}
if(ls.isEmpty()) {
return true;
}else
return isNS(new ArrayList<Integer>(ls),w);
}
}