趣味算式
普通解法
import java.util.*; public class Main1 { public static void check(String str){ String []s =str.split("[\+]|[-]"); String sign =str.replaceAll("\d*", ""); int sum=Integer.parseInt(s[0]); for(int i=0;i<s.length-1;i++){ switch (sign.charAt(i)) { case '+': sum+=Integer.parseInt(s[i+1]); break; case '-': sum-=Integer.parseInt(s[i+1]); break; } } if(sum==110) System.out.println(str); } public static void dfs(String s){ char []c= s.toCharArray(); StringBuffer sb = new StringBuffer(); int len= s.length()-1; int []sign=new int [len]; while(sign[0]<3){ sb.append(c[0]); for(int i=0;i<len;i++){ if(sign[i]==1){ sb.append("+"); }else if(sign[i]==2) sb.append("-"); sb.append(c[i+1]); } check(sb.toString()); sb.setLength(0); sign[len-1]++; for(int i=len-1;i>0;i--){ if(sign[i]==3){ sign[i]=0; sign[i-1]++; } } } } public static void main(String[] args) { String s = "123456789"; dfs(s); } }
递归的精髓啊
public class Demo15 { // 遍历所有情况 public static void fun(String v, int n) { if(n==9){ // 修改到最后一位符号时输出 check(v); }else{ // 递归向后修改,数字 变为 数字加符号 fun(v.replace(n+"", n+"+"),n+1); fun(v.replace(n+"", n+"-"),n+1); fun(v,n+1); } } // 验证 并 输出 public static void check(String str){ String[] s = str.split("[\+]"); int sum = 0; for(String t:s){ String[] sub = t.split("[\-]"); int num = Integer.parseInt(sub[0]); // 计算负数 for(int i=1;i<sub.length;i++){ num -= Integer.parseInt(sub[i]); } sum += num; // 正数或负数结果 加到 总和上 } if(sum == 110){ System.out.println(str); } } public static void main(String[] args){ String str = "123456789"; fun(str,1); // 调用函数,从1开始修改 } }