小米一面,第一次面试没写出算法题ww
面完后找cfd帮忙写出来了
大于等于2时就往下继续拆分,0、1不用在前面套2
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
// 7 => 2(2)+2+2(0)
// 3 => 2+2(0)
// 1 => 2(0)
// 有一个问题 2(2(0)) 应该是2
string dfs(int n)
{
if (n == 1) return "2";
if (n == 0) return "2(0)";
vector<bool>b1(32, 0);
for (int i = 0; i < 32; i++)
{
if ((n >> i) & 1)
b1[i] = true; // 第几位有1
}
string res = "";
for (int i = 31; i >= 0; i--)
{
if (b1[i] == true)
{
if (i >= 2)
{
// 处理i这个数字, 将i拆分
string tmp = dfs(i);
res += "2(" + tmp + ")+";
}
else {
res += dfs(i) + "+";
}
}
}
if (res.size())
res.pop_back();
return res;
}
// 可以得出7 3 这些
// 接着拆分7 3
// 7 => 111
// 3 => 11
void expFun(unsigned int n) {
string res = dfs(n);
cout << res << endl;
}
int main() {
expFun(7);
return 0;
}