首页 » 编程之美 » 正文

[编程之美_2.8]找符合条件的整数

题意很简单,给定一个n, 求一个最小的m,使得nm中的10进制表示只有0,1
方法1:Brute Force [大整数的情况需要考虑,何时终止,时间复杂度如何?]

bool CheckNumber(int number)
{
   while(number)
   {
       if (number%10 != 0 && number%10 != 1)
           return false;
       number /= 10;
   }
   return true;
}
int CalcMBruteForce(int n)
{
   int m = 1;
   while (!CheckNumber(m</em>n))
   {
       m++;
   }
   return m;
}

方法2:BFS [大整数的情况需要考虑,何时终止,去重复计算问题]

int CalcM(int number)
{
   int i = 1;
   vector<</span>int> vList;
   vList.clear();
   vList.push_back(0);
   vList.push_back(1);
   vector<</span>int> vListC;
   int k = 1;
   // TODO:
   // BigInt
   // Delete duplicate
   while (true)
   {
       vListC.clear();
       for (vector<</span>int>::size_type i = 0;i <</span> vList.size();i++)
       {
           if (vList[i] && vList[i] % number == 0)
           {
               return vList[i];
           }
           vListC.push_back(vList[i] + 0);
           vListC.push_back(vList[i] + (int)pow(10.0, k));
       }
       vList.clear();
       vList = vListC;
       k++;
   }
}

本文共 1 个回复

发表评论