您的位置:首页 > 其它

leetcode 24 Game

2018-03-07 18:52 411 查看
string doubleToString(double num)
{
stringstream ss;
string str;
ss << num;
ss >> str;
return str;
}

void helper(vector<double>& num, vector<char>& ops, double eps,vector<string>& str,vector<string>& vecRes)
{
if(num.size() == 1) {
if(abs(num[0] - 24) < eps) {
vecRes.push_back(str[0]);

}
}
for(unsigned int i = 0; i < num.size(); ++i) {
for(unsigned int j = 0; j < num.size(); ++j) {
if(i == j)  continue;
vector<double> temp;
vector<string> s;
for(unsigned int k = 0; k < num.size(); k++) {
if(k != i && k != j) {
temp.push_back(num[k]);
s.push_back(str[k]);
}
}
for(char ch : ops) {
if(((ch == '+') | (ch == '*')) && (i > j)) continue;
if((ch == '/') && num[j] < eps) continue;
switch(ch) {
case '+':
temp.push_back(num[i] + num[j]);
s.push_back("(" + str[i] + "+" + str[j] + ")");
break;
case '-':
temp.push_back(num[i] - num[j]);
s.push_back("(" + str[i] + "-" + str[j] + ")");
break;
case '*':
temp.push_back(num[i] * num[j]);
s.push_back("(" + str[i] + "*" + str[j] + ")");
break;
case '/':
temp.push_back(num[i] / num[j]);
s.push_back("(" + str[i] + "/" + str[j] + ")");
break;
}
helper(temp, ops, eps, s, vecRes);
temp.pop_back();
s.pop_back();
}
}
}
}

int judgePoint24(vector<int>& num, vector<string>& vecRes)
{
double eps = 0.001;
vector<char> ops{ '+', '-', '*', '/' };
vector<double> arr(num.begin(), num.end());
vector<string> str;
for(unsigned int i = 0; i < num.size(); i++) {
str.push_back(doubleToString(num[i]));
}
helper(arr, ops, eps, str, vecRes);
return vecRes.size();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: