Matchsticks to Square LeetCode solution in Java
1class Solution {2public boolean makesquare(int[] M) {3Arrays.sort(M);4int total = 0;5for (int i = 0; i < M.length; i++) total += M[i];6side = total / 4;7if ((float) total / 4 > side || M[M.length - 1] > side) return false;8return btrack(M.length - 1, side, 0, M);9}1011private int side;1213private boolean btrack(int i, int space, int done, int[] M) {14if (done == 3) return true;15for (; i >= 0; i--) {16int num = M[i];17boolean res;18if (num > space) continue;19M[i] = side + 1;20if (num == space) res = btrack(M.length - 2, side, done + 1, M);21else res = btrack(i - 1, space - num, done, M);22if (res) return true;23M[i] = num;24while (i > 0 && M[i - 1] == num) i--;25}26return false;27}28}