Ich versuche, dieses arithmetische Ausdruck Problem zu lösen wo ich n (hier 5) Elemente in einem Array und versuchen Sie alle Kombination von Operatoren in (+ - *) zu finden, wenn der Ausdruck durch 101 teilbar ist Hier sind wir nicht mit der Reihenfolge der operators..not BODMAS EingangsWie funktioniert diese rekursive Backtrack-Lösung zum Lösen von arithmetischen Ausdrücken?
Output
55 + 3-45 * 33-25
Verwendung betroffenenIch bin neu bei Rekursion und Backtracking. Ich versuche, die einen Teil des Problems zu verstehen ist falsch
Hier ist mein Code:
public static boolean solve(char []operators,long[]nums,long res,int index,Stack<Character>st){
if(index+1==nums.length){ //reached end of number array
if(res%101==0){
System.out.println(res);
return true;
}
return false;
}
for(int i=0;i<operators.length;i++){
char op=operators[i]; //try the operator
long num1=nums[index];
long num2=nums[index+1]; //LINE1
System.out.println("trying "+num1+""+op+" num2="+num2);
res=performOp(op,num1,num2);
nums[index+1]=res;
st.push(op);
if(solve(operators,nums,res,index+1,st)){
return true;
}
//backtrack
//return to earlier state than try another operator
//LINE2
nums[index+1]=performBackTrack(op,num1,num2); //restoring number
System.out.println("num2="+num2+" num1="+num1+" after backtrack");
st.pop();
}
return false;
}
public static long performBackTrack(char op,long num1,long num2){
//trying to restore numbers
switch(op){
case '+':return num2-num1;
case '-':return num1-num2;
case '*':return num1/num2;
default:return 0L;
}
}
public static long performOp(char op,long num1,long num2){
switch(op){
case '+':return num1+num2;
case '-':return num1-num2;
case '*':return num1*num2;
default:return 0L;
}
}
Hier nach Rückzieher, wenn ich Änderungen an LINE2 machen und innerhalb der Schleife gehen nächste Operator, die Änderungsarbeiten zu versuchen, Gut, wenn ich die ursprüngliche Nummer an LINE2 zurückbekomme, aber sie wird nicht an LINE1 reflektiert, die letzte Nummer, die ich versuche, wiederherzustellen, bevor ich einen Operator ausprobiere, wird nicht in LINE1 wiedergegeben.
Bitte help..Any Art von Hilfe geschätzt wird ...
Wenn es eine Ausnahme gibt, bitte posten Sie es auch. –
Hallo, ich bekomme keine Ausnahme, nur völlig falsches Ergebnis. – Learner