首页 > 代码库 > Snapchat - give sum target list<Integer> first who hits target wins
Snapchat - give sum target list<Integer> first who hits target wins
// DP 从 1-N 不重复取数 加到sum 上 第一个超过target赢 先手可以赢吗?
开始想错了,以为和climbing stairs和combination sum iv一个类型,是一个dfs
1 dfs(list, sum, target) 2 3 1. 如果list长度是0,那么就说明当前玩家没机会赢了,返回false 4 5 2. 如果list长度是1,那么说明该玩家赢了,因为后面一个玩家已经没机会抽了 6 7 3. 对于list中的数依次尝试: 8 9 如果当前数字加上sum能够达到target了,就返回true10 否则,从list中把这个数移除,递归11 12 如果递归的结果是true,也就是说下一个玩家会赢,也就是说当前玩家会输,那么result是false13 再把这个数加回去,记得放回原位!
代码:
1 public class ChooseOneNumFirstWIllWin { 2 public boolean dfs(List<Integer> list, int sum, int target) { 3 if(list.size() == 0) { 4 return false; 5 } 6 if(list.size() == 1) { 7 return true; 8 } 9 boolean result = true;10 for(int i = 0; i < list.size(); i++) {11 if(sum + list.get(i) >= target) {12 return true;13 }14 int cur = list.remove(i);15 if(dfs(list, sum + cur, target)) {16 result = false;17 }18 list.add(i, cur);19 }20 return result;21 }22 23 public static void main(String[] args) {24 List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5));25 int sum = 0;26 int target = 11;27 ChooseOneNumFirstWIllWin sample = new ChooseOneNumFirstWIllWin();28 System.out.println(sample.dfs(list, sum, target));29 30 }31 }
Snapchat - give sum target list<Integer> first who hits target wins
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。