classSolution{public:intconfusingNumberII(intn){returndfs(n,0,0,1);}private:vector<pair<int,int>>digitToRotated{{0,0},{1,1},{6,9},{8,8},{9,6}};intdfs(intn,longnum,longrotatedNum,longunit){intans=num!=rotatedNum;// Add one more digitfor(constauto&[digit,rotated]:digitToRotated){if(digit==0&&num==0)continue;constlongnextNum=num*10+digit;if(nextNum>n)break;ans+=dfs(n,nextNum,rotated*unit+rotatedNum,unit*10);}returnans;}};
classSolution{publicintconfusingNumberII(intn){returndfs(n,0,0,1);}privateint[][]digitToRotated={{0,0},{1,1},{6,9},{8,8},{9,6}};intdfs(intn,longnum,longrotatedNum,longunit){intans=num==rotatedNum?0:1;// Add one more digitfor(int[]pair:digitToRotated){finalintdigit=pair[0];finalintrotated=pair[1];if(digit==0&&num==0)continue;finallongnextNum=num*10+digit;if(nextNum>n)break;ans+=dfs(n,nextNum,rotated*unit+rotatedNum,unit*10);}returnans;}}
classSolution:defconfusingNumberII(self,n:int)->int:digitToRotated=[(0,0),(1,1),(6,9),(8,8),(9,6)]defdfs(num:int,rotatedNum:int,unit:int)->int:ans=0ifnum==rotatedNumelse1# Add one more digitfordigit,rotatedindigitToRotated:ifdigit==0andnum==0:continuenextNum=num*10+digitifnextNum>n:breakans+=dfs(nextNum,rotated*unit+rotatedNum,unit*10)returnansreturndfs(0,0,1)