classSolution{public:intminTransfers(vector<vector<int>>&transactions){vector<int>balance(21);vector<int>debt;for(constvector<int>&t:transactions){constintfrom=t[0];constintto=t[1];constintamount=t[2];balance[from]-=amount;balance[to]+=amount;}for(constintb:balance)if(b>0)debt.push_back(b);returndfs(debt,0);}private:intdfs(vector<int>&debt,ints){while(s<debt.size()&&!debt[s])++s;if(s==debt.size())return0;intans=INT_MAX;for(inti=s+1;i<debt.size();++i)if(debt[i]*debt[s]<0){debt[i]+=debt[s];// debt[s] is settledans=min(ans,1+dfs(debt,s+1));debt[i]-=debt[s];// Backtrack}returnans;}};
classSolution{publicintminTransfers(int[][]transactions){int[]balance=newint[21];List<Integer>debt=newArrayList<>();for(int[]t:transactions){finalintfrom=t[0];finalintto=t[1];finalintamount=t[2];balance[from]-=amount;balance[to]+=amount;}for(finalintb:balance)if(b!=0)debt.add(b);returndfs(debt,0);}privateintdfs(List<Integer>debt,ints){while(s<debt.size()&&debt.get(s)==0)++s;if(s==debt.size())return0;intans=Integer.MAX_VALUE;for(inti=s+1;i<debt.size();++i)if(debt.get(i)*debt.get(s)<0){debt.set(i,debt.get(i)+debt.get(s));// Debt.get(s) is settledans=Math.min(ans,1+dfs(debt,s+1));debt.set(i,debt.get(i)-debt.get(s));// Backtrack}returnans;}}
classSolution:defminTransfers(self,transactions:List[List[int]])->int:balance=[0]*21foru,v,amountintransactions:balance[u]-=amountbalance[v]+=amountdebt=[bforbinbalanceifb]defdfs(s:int)->int:whiles<len(debt)andnotdebt[s]:s+=1ifs==len(debt):return0ans=math.infforiinrange(s+1,len(debt)):ifdebt[i]*debt[s]<0:debt[i]+=debt[s]# debt[s] is settledans=min(ans,1+dfs(s+1))debt[i]-=debt[s]# Backtrackreturnansreturndfs(0)