美文网首页OJ
LeetCode 679. 24 Games

LeetCode 679. 24 Games

作者: ciferlv | 来源:发表于2018-01-28 13:25 被阅读0次
  • 这道题体面要求是四个数,填入+、-、*、/和(),来使其结果为24,实际上可以看成一个组合问题,比如从四个数中任意取出2个,算出和,在与剩下的两个数组合到一起,重复这个过程,如果最后能得到24,就返回True,否则返回False,比较简单。代码如下:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {

    boolean flag = false;

    public void search(List<Double> nums) {
        if(flag) return;

        if (nums.size() == 1) {

            if (Math.abs(nums.get(0)-24) < 0.000001) flag = true;
            return;
        }

        int nums_size = nums.size();
        for (int i = 0; i < nums_size; i++) {

            for (int j = i + 1; j < nums_size; j++) {

                double ni = nums.get(i), nj = nums.get(j);

                ArrayList<Double> temp_nums = new ArrayList<>();

                for (int k = 0; k < nums_size; k++) {

                    if( k != i && k != j) temp_nums.add(nums.get(k));
                }

                List<Double> temp_res = new ArrayList<>();
                temp_res.addAll(Arrays.asList(ni + nj, ni * nj, ni - nj, nj - ni, ni / nj, nj / ni));

                for (double t : temp_res) {
                    temp_nums.add(temp_nums.size(), t);
                    search(temp_nums);
                    temp_nums.remove(temp_nums.size()-1);
                }
            }
        }
    }

    public boolean judgePoint24(int[] nums) {

        List<Double> nums_d = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) nums_d.add((double) nums[i]);
        search(nums_d);
        return flag;
    }

    public static void main(String[] args) {

        Solution s = new Solution();
        int[] nums = {1, 1, 1, 1};
//        int[] nums = {4, 1, 8, 7};
        System.out.println(s.judgePoint24(nums));
    }
}
  • 需要注意的点是List的Remove和Add操作,Remove操作时,一定要是准确的index,不能越界,Add时,Add的Index可以是List Size,表示加在最后一个。

相关文章

网友评论

    本文标题:LeetCode 679. 24 Games

    本文链接:https://www.haomeiwen.com/subject/tmgaaxtx.html