T1
将数num的每一位数用两个数组存储一个存储奇数,一个存储偶数,并对它们进行排序,将num转化为字符串,将之前排序后数组的最大值与字符串对应的数字的奇偶进行转换。
代码:
class Solution {
public:
int largestInteger(int num) {
int n = num;
vector<int> a, b; //a存放奇数, b存放偶数
while(n){
if(n % 10 & 1) a.push_back(n % 10);
else b.push_back(n % 10);
n /= 10;
}
sort(a.begin(), a.end()), sort(b.begin(), b.end());
int na = a.size() - 1, nb = b.size() - 1;
int res = 0;
string s = to_string(num);
for(int i = 0; i < s.size(); i ++){
int m = s[i] - '0';
if(m & 1) res = res * 10 + a[na --];
else res = res * 10 + b[nb --];
}
return res;
}
};
T2:
这个处理是真的麻烦,因为字符串的长度很小,我就直接暴力枚举,在此期间我wa了二次,一次是因为999+999没有加括号,还有一次是因为少算了一次情况
代码:
class Solution {
public:
string minimizeResult(string s) {
string a, b;
int flag = 0;
for(int i = 0; i < s.size(); i ++){
if(s[i] == '+') {
flag = 1;
continue;
}
if(flag) b += s[i];
else a += s[i];
}
int res = stoi(a) + stoi(b);
string ans;
ans += "(";
ans += s;
ans += ")";
for(int i = 0; i < a.size(); i ++){
int la = 0, ra = 0;
for(int q = 0; q <= i; q ++) la = la * 10 + a[q] - '0';
for(int w = i + 1; w < a.size(); w ++) ra = ra * 10 + a[w] - '0';
//cout << la << " " << ra << endl;
for(int j = 0; j < b.size(); j ++){
int lb = 0, rb = 0;
for(int e = 0; e <= j; e ++) lb = lb * 10 + b[e] - '0';
for(int r = j + 1; r < b.size(); r ++) rb = rb * 10 + b[r] - '0';
if(ra)
{
int sum;
sum = la * (ra + lb);
if(rb) sum *= rb;
if(res > sum){
res = sum;
ans = "";
ans += to_string(la);
ans += "(";
ans += to_string(ra);
ans += "+";
ans += to_string(lb);
ans += ")";
if(rb) ans += to_string(rb);
}
}
else{
int sum;
sum = (la + lb);
if(rb) sum *= rb;
if(res > sum){
res = sum;
ans = "";
ans += "(";
ans += to_string(la);
ans += "+";
ans += to_string(lb);
ans += ")";
if(rb) ans += to_string(rb);
}
}
}
}
//string ans = to_string(res);
return ans;
}
};
T3:
我是用的优先队列,因为之前也有一道题就是直接套用优先队列我当时还是因为是什么数学规律,推了半天还是错,呜呜呜~,这次就牢牢记住了。
用小根堆来存储,进行k次循环,每次将最小值加1(要使所有乘积最大,只需将最小值+1即可),最后直接相乘就可以了
代码:
class Solution {
public:
typedef long long LL;
const int N = 1e9 + 7;
int maximumProduct(vector<int>& nums, int k) {
priority_queue<int, vector<int>, greater<int>> q;
for(auto i : nums) q.push(i);
while(k --){
int m = q.top();
m ++;
q.pop();
q.push(m);
}
int res = 1;
while(q.size()){
res = (LL)res * q.top() % N;
q.pop();
}
return res;
}
};
T4。。。。原本还是想试一下的,但是看到了是贪心就被劝退了。