这题用逆向思维。一开始我是顺着想的,发现分叉太多。。。
这位老哥讲的太好了,我就不献丑了。
class Solution {
public boolean isPossible(int[] target) {
if(target.length == 1){
return target[0] == 1;
}
PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
int sum = 0;
for(int t : target){
sum += t;
queue.add(t);
}
while(queue.peek() != 1){
int cur = queue.poll();
if(sum - cur == 1){
return true;
}
int x = sum % (sum - cur);
sum = sum - cur + x;
if(x == 0 || x == cur){
return false;
}
queue.add(x);
}
return true;
}
}