이 연산 식 문제를 해결하려고합니다. 배열에서 n (여기서는 5) 개의 요소를 취하여 (+ - *)의 연산자 조합을 모두 시도하여식이 101로 나눌 수 있는지 찾습니다. 여기에서 우리는 BODMAS 를 사용 operators..not 순서 입력이 재귀 - 백 트랙 솔루션은 산술 표현을 해결하기 위해 어떻게 작동합니까?
5
55 3 45 33 25
출력
+ 55 * 33-25 3-45
염려하지나는 재귀 및 역 추적에서 새로운 편이다. 내가 라인 2에서 변경하고 다음 조작, 변경 작업을 시도하는 루프 내부에 갈 때, 되돌아 후 다음
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;
}
}
: 나는 문제의 어떤 부분을 이해하려고하는 것은 잘못된 것입니다 여기에
내 코드입니다 괜찮아요 내가 LINE2에서 orignal 번호를 다시 얻었지만 그것은 LINE1에 반영되지 않습니다. LINE1에 연산자를 시도하기 전에 복원하려고하는 마지막 번호가 반영되지 않습니다.도움 help..Any 종류가 이해할 수있을 것이다하시기 바랍니다 ...
예외가있는 경우 게시 해주세요. –
안녕하세요, 나는 어떤 예외도 얻지 못하고 있습니다, 단지 완전히 잘못된 결과입니다. – Learner