题目描述:
A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside down).
Find all strobogrammatic numbers that are of length = n.
Example:
Input: n = 2
Output: ["11","69","88","96"]
class Solution {
public:
vector<string> findStrobogrammatic(int n) {
vector<string> result;
if(n<0) return result;
if(n==0) return {"0","1","8"};
string cur;
helper(0,n,cur,result);
return result;
}
void helper(int i, int n, string cur, vector<string>& result)
{
if(i==n/2)
{
if(n%2==1)
{
result.push_back(cur+"8"+get_reverse(cur));
result.push_back(cur+"0"+get_reverse(cur));
result.push_back(cur+"1"+get_reverse(cur));
}
else result.push_back(cur+get_reverse(cur));
return;
}
if(i>0) helper(i+1,n,cur+"0",result);
helper(i+1,n,cur+"1",result);
helper(i+1,n,cur+"6",result);
helper(i+1,n,cur+"8",result);
helper(i+1,n,cur+"9",result);
}
string get_reverse(string s)
{
string ans;
for(int i=s.size()-1;i>=0;i--)
{
if(s[i]=='1') ans+="1";
else if(s[i]=='8') ans+="8";
else if(s[i]=='0') ans+="0";
else if(s[i]=='6') ans+="9";
else if(s[i]=='9') ans+="6";
}
return ans;
}
};