Expression Add Operators
严氏北美IT公司面试真题汇总和解答论坛 :: LinkedIn公司面试真题: 注册用户可以看到隐藏题目:2017年下半年上机题,8 9 10三个月的onsite面试真题 :: 深度优先搜索:字符串相关
Page 1 of 1
Expression Add Operators
static List<String> res=new ArrayList<String>();
public static List<String> addOperators(String num, int target) {
DFS(num, target, "", 0, 0);
return res;
}
private static void DFS(String num, int target, String cur, long curRes, long preNum){
if(curRes == target && num.length() == 0){
res.add(new String(cur));
return;
}
for(int i = 1; i <= num.length(); i++){
String curStr = num.substring(0, i);
if(curStr.length() > 1 && curStr.charAt(0) == '0')
return;
long curNum = Long.parseLong(curStr);
String next = num.substring(i);
if(cur.length() != 0){
DFS(next, target, cur+"*"+curNum, (curRes - preNum) + preNum * curNum, preNum * curNum);
DFS(next, target, cur+"/"+curNum, (curRes - preNum) + preNum / curNum, preNum / curNum);
DFS(next, target, cur+"+"+curNum, curRes + curNum, curNum);
DFS(next, target, cur+"-"+curNum, curRes - curNum, -curNum);
} else {
DFS(next, target, curStr, curNum, curNum);
}
}
}
public static void main(String[] args) {
List<String> res=addOperators("321",4);
for(String s: res)
System.out.println(s);
}
public static List<String> addOperators(String num, int target) {
DFS(num, target, "", 0, 0);
return res;
}
private static void DFS(String num, int target, String cur, long curRes, long preNum){
if(curRes == target && num.length() == 0){
res.add(new String(cur));
return;
}
for(int i = 1; i <= num.length(); i++){
String curStr = num.substring(0, i);
if(curStr.length() > 1 && curStr.charAt(0) == '0')
return;
long curNum = Long.parseLong(curStr);
String next = num.substring(i);
if(cur.length() != 0){
DFS(next, target, cur+"*"+curNum, (curRes - preNum) + preNum * curNum, preNum * curNum);
DFS(next, target, cur+"/"+curNum, (curRes - preNum) + preNum / curNum, preNum / curNum);
DFS(next, target, cur+"+"+curNum, curRes + curNum, curNum);
DFS(next, target, cur+"-"+curNum, curRes - curNum, -curNum);
} else {
DFS(next, target, curStr, curNum, curNum);
}
}
}
public static void main(String[] args) {
List<String> res=addOperators("321",4);
for(String s: res)
System.out.println(s);
}
严氏北美IT公司面试真题汇总和解答论坛 :: LinkedIn公司面试真题: 注册用户可以看到隐藏题目:2017年下半年上机题,8 9 10三个月的onsite面试真题 :: 深度优先搜索:字符串相关
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
|
|