【字符串】1016. 子串能表示从 1 到 N 数字的二进制串

题目:

 

 

解答:

就是逐个遍历从 1 到 N 的数字,转换成二进制字符串(去掉头部无用的 '0')看看是否在字符串 S 中,遇到不在的就返回 false, 要是都在就返回 true。

 

 1 class Solution {
 2 public:
 3     bool queryString(string S, int N) 
 4     {
 5         for(size_t i=1; i<=N; ++i)
 6         {
 7             string s = to_binary(i);
 8             if(S.find(s, 0)==-1) 
 9             {
10                 return false;
11             }
12         }
13         return true;
14     }
15     static string to_binary(int n)
16     {
17         string s;
18         while(n!=0)
19         {
20             s += to_string(n%2);
21             n /= 2;
22         }
23         s += to_string(n);
24         reverse(s.begin(), s.end());
25         string::iterator it = s.begin()+1;
26         while(*(it-1)=='0')
27         {
28             s.erase(it-1);
29         }
30         return s;
31     }
32 };

 

posted @ 2020-05-04 13:08  梦醒潇湘  阅读(259)  评论(0)    收藏  举报