直接dfs暴搜所有串,2^18=1024*256,时间上是允许的。然后判断串是否合法。
1 const int N = 19; 2 bool path[N]; 3 class Solution { 4 public: 5 bool check(int n){ 6 for(int i=0;i<n-1;i++){ 7 if(path[i]==0&&path[i+1]==0) 8 return false; 9 } 10 return true; 11 } 12 void dfs(int u,int& n,vector<string>& res){ 13 if(u>=n){ 14 if(check(n)){ 15 string s=""; 16 for(int i=0;i<n;i++) 17 if(path[i]) 18 s+="1"; 19 else 20 s+="0"; 21 res.push_back(s); 22 } 23 return ; 24 } 25 path[u]=0; 26 dfs(u+1,n,res); 27 path[u]=1; 28 dfs(u+1,n,res); 29 } 30 vector<string> validStrings(int n) { 31 vector<string> res; 32 dfs(0,n,res); 33 return res; 34 } 35 };