大佬題解
class Solution {
public List<Integer> diffWaysToCompute(String input) {
List<Integer> res = new LinkedList<>();//這裡要注意,每一個調用遞歸函數都會有一個【屬于】本次
// 調用的res清單存放資料
// 遞歸函數傳參傳進來的是上一層左半部分或者右半部分
for(int i=0;i<input.length();i++){ //一層(一次函數調用中)需要将傳入數字元串周遊完
char temp = input.charAt(i);
if(temp == '+' || temp == '-' || temp == '*'){
List<Integer> left = diffWaysToCompute(input.substring(0,i));
List<Integer> right = diffWaysToCompute(input.substring(i+1));
for(int l:left){
for(int r:right){
if(temp == '-'){
res.add(l-r);//而一層中隻有一個res用于存放資料
}else if(temp == '+'){
res.add(l+r);
}else if(temp == '*'){
res.add(l*r);
}
}
}
}
}
//這種情況是隻有一個數字字元傳入了遞歸函數,那麼該次調用直接傳回該數值的list集合
if(res.size() == 0){
res.add(Integer.valueOf(input));
return res;
}
return res;
}
}