sweet1cris

Untitled

Feb 9th, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.60 KB | None | 0 0
  1.  
  2. public class Solution {
  3.     /**
  4.      * @param num a string contains only digits 0-9
  5.      * @param target an integer
  6.      * @return return all possibilities
  7.      */
  8.     public List<String> addOperators(String num, int target) {
  9.         // Write your code here
  10.         List<String> results = new ArrayList<String>();
  11.         if (num == null || num.length() == 0) {
  12.             return results;
  13.         }
  14.         helper(results, "", num, target, 0, 0, 0);
  15.         return results;
  16.     }
  17.     public void helper(List<String> results, String path, String num, int target, int pos, long eval, long multed){
  18.         if (pos == num.length()){
  19.             if(target == eval)
  20.                 results.add(path);
  21.             return;
  22.         }
  23.         for (int i = pos; i < num.length(); i++) {
  24.             if (i != pos && num.charAt(pos) == '0') {
  25.                 break;
  26.             }
  27.             long cur = Long.parseLong(num.substring(pos, i + 1));
  28.             if (pos == 0) {
  29.                 helper(results, path + cur, num, target, i + 1, cur, cur);
  30.             } else {
  31.                 helper(results, path + "+" + cur, num, target, i + 1, eval + cur , cur);
  32.                 helper(results, path + "-" + cur, num, target, i + 1, eval -cur, -cur);
  33.                 helper(results, path + "*" + cur, num, target, i + 1, eval - multed + multed * cur, multed * cur );
  34.             }
  35.         }
  36.     }
  37. }
  38.  
  39.  
  40. // version: 高频题班
  41. public class Solution {
  42.     /**
  43.      * @param num a string contains only digits 0-9
  44.      * @param target an integer
  45.      * @return return all possibilities
  46.      */
  47.     String num;
  48.     int target;
  49.     List<String> ans = new ArrayList<>();
  50.  
  51.     void dfs(int pos, String str, long sum, long lastF) {
  52.         if (pos == num.length()) {
  53.             if (sum == target) {
  54.                 ans.add(str);
  55.             }
  56.             return;
  57.         }
  58.         for (int i = pos; i < num.length(); i++) {
  59.             long cur = Long.parseLong(num.substring(pos, i + 1));
  60.  
  61.             if (pos == 0) {
  62.                 dfs(i + 1, "" + cur, cur, cur);
  63.             } else {
  64.                 dfs(i + 1, str + "*" + cur, sum - lastF + lastF * cur, lastF * cur);
  65.                 dfs(i + 1, str + "+" + cur, sum + cur, cur);
  66.                 dfs(i + 1, str + "-" + cur, sum - cur, -cur);
  67.             }
  68.             if (num.charAt(pos) == '0') {
  69.                 break;
  70.             }
  71.         }
  72.     }
  73.  
  74.     public List<String> addOperators(String num, int target) {
  75.         // Write your code here
  76.         this.num = num;
  77.         this.target = target;
  78.         dfs(0, "", 0, 0);
  79.         return ans;
  80.     }
  81. }
Advertisement
Add Comment
Please, Sign In to add comment