趣味算式java
普通解法 app
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開始修改 } }