zoukankan      html  css  js  c++  java
  • 图-搜索-dfs-739. 24点

    2020-04-04 19:46:42

    问题描述:

    你有 4 张卡片, 每一张上面都有一个 1 到 9 的数字. 你需要判断是否能用运算符 */+-() 来计算得到 24

    样例

    样例 1:

    输入:[1, 4, 8, 7]
    输出:true
    解释:8 * (7 - 4) * 1 = 24

    样例 2:

    输入:[1, 1, 1, 2]
    输出:false
    解释:无法得到24

    样例 3:

    输入:[3, 3, 8, 8]
    输出:true
    解释:8 / ( 3 - 8 / 3) = 24

    注意事项

    除法运算符 / 是真正的除法, 而不是整数除法. 所以 4 / (1 - 2 / 3) = 12.
    所有的运算符位于两个数字之间. 尤其是, 我们不能将 - 当做一个一元运算符. 比如说, 输入为[1, 1, 1, 1], 表达式 - 1 - 1 - 1 - 1 是不允许的
    你不能将数字 串联 起来. 比如, 如果输入为 [1, 2, 1, 2], 我们不能写成 12 + 12

    问题求解:

    直接暴力搜索。

        public boolean compute24(double[] nums) {
            // write your code here
            return compute(nums, 4);
        }
        public boolean compute(double[] nums, int n) {
            if (n == 1) {  
                if (Math.abs(nums[0] - 24) <= 1E-6) return true; 
                else return false;
            }  
            for(int i = 0; i < n; i ++) {
                for (int j = i + 1; j < n; j++) {
                    double a, b;   
                    a = nums[i];  
                    b = nums[j];  
                    nums[j] = nums[n - 1];  
                    nums[i] = a + b;  
                    if (compute(nums, n - 1)) {
                    	return true;
        			}
                    nums[i] = a - b;  
                    if (compute(nums, n - 1)) {
                    	return true;
        			}  
                    nums[i] = b - a;  
                    if (compute(nums, n - 1)) {
                    	return true;
        			} 
                    nums[i]=a * b;  
                    if (compute(nums, n - 1)) {
                    	return true;
        			}  
                    if (b != 0){  
                        nums[i] = a / b;  
                        if(compute(nums, n - 1)) {
                    		return true;
        				}  
                    }  
                    if (a != 0){ 
                        nums[i] = b / a;  
                        if(compute(nums, n - 1)) {
                    		return true;
        				}  
                    }  
                    nums[i] = a;  
                    nums[j] = b;  
                }  
            }
        	return false; 
        }
    

      

  • 相关阅读:
    [转]SVN 乱码问题
    [转]自己做 Visual Studio 2013 代码折叠插件
    [Java]一步一步学 Web
    [转]SQL Server 结构读取
    [转][c#]注册表经验集
    [转]加密经验集 => C#
    [转]Oracle 连接dll
    《高效能程序员的修炼》读书笔记
    Blend for Visual Studio 2013
    ASP.NET中服务器控件的生命周期
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12633722.html
Copyright © 2011-2022 走看看