第一题:按奇偶性交换后的最大数字
我看到这个题目一开始就有两种思路。一是将整数转化为字符串后将奇偶数分成两个数组,标记原字符串中的奇偶数位置,然后对两个数组排序。最后直接根据标记从数组中取出奇偶数组合即可。嗯,好笑的来了,我并不能写出代码。第二种思路就是转化为字符串后使用冒泡排序(刚知道这不是冒泡排序),然后再转化为整数。我也是这样写了,但是最后为什么没有通过呢,因为我把排序写错了,然后直接还没有发现。看看我写的错误代码吧:
(其实一开始在整数转字符串和字符串转整数我都用的函数,可能是因为用法不对报错了,我就自己手写了。)
class Solution {
public:
int largestInteger(int num) {
vector<int>s;
while(num>0){
s.push_back(num%10);
num=num/10;
}
for(int i=0;i<s.size()-1;i++){
for(int j=1;j<s.size();j++){
if(s[i]<s[j]&&s[i]%2==s[j]%2){
swap(s[i],s[j]);
}
}
}
int result=0;
for(int i=0;i<s.size();i++){
result=result*10+s[i]-'0';
}
return result;
}
};
啊啊啊啊,我真无语。
然后看看正确代码叭
class Solution {
public:
int largestInteger(int num) {
string nums=to_string(num);
int n=nums.size();
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(nums[i]<nums[j]&&(nums[j]-nums[i])%2==0)
swap(nums[i],nums[j]);
}
}
return stoi(nums);
}
};
然后我觉得nums[i]<nums[j]&&(nums[j]-nums[i])%2==0这里处理的挺巧妙的,因为我一开始没有想到哈哈哈哈哈。
第二题:向表达式添加括号后的最小结果
这个题一开始能想到的思路就是枚举。但是实现起来有点麻烦所以也没有写出来。后来看别人的题解,感觉题目还是很简单的,真就是处理起来比较麻烦,所以对于我这种来说一开始会决定难!这个题目分三步:
1、将字符串加号前后的字符分为两个子串。
2、找出所有可以加括号的情况并记录括号的位置
int result=INT_MAX;
int startindex=0;
int endindex=0;
for(int i=0;i<s1.size();i++){
int num1=1,num4=1;
for(int j=s2.size()-1;j>=0;j--){
if(i!=0)num1=atoi(s1.substr(0,i).c_str());
int num2=atoi(s1.substr(i,s1.size()).c_str());
int num3=atoi(s2.substr(0,j+1).c_str());
if(j!=s2.size()-1)num4=atoi(s2.substr(j+1,s2.size()).c_str());
int count=num1*(num2+num3)*num4;
if(result>count){
startindex=i;
endindex=j;
result=count;
}
}
}在这里插入代码片
3、在上面记录的最终位置添加括号。
参考代码:
class Solution {
public:
string minimizeResult(string expression) {
int a=0;
for(int i=0;i<expression.size();i++){
if(expression[i]=='+')
a=i;
}
string s1=expression.substr(0,a);
string s2=expression.substr(a+1,expression.size()-1);
int result=INT_MAX;
int startindex=0;
int endindex=0;
for(int i=0;i<s1.size();i++){
int num1=1,num4=1;
for(int j=s2.size()-1;j>=0;j--){
if(i!=0)num1=atoi(s1.substr(0,i).c_str());
int num2=atoi(s1.substr(i,s1.size()).c_str());
int num3=atoi(s2.substr(0,j+1).c_str());
if(j!=s2.size()-1)num4=atoi(s2.substr(j+1,s2.size()).c_str());
int count=num1*(num2+num3)*num4;
if(result>count){
startindex=i;
endindex=j;
result=count;
}
}
}
expression=expression.insert(startindex,"(");
expression=expression.insert(endindex+s1.size()+3,")");
return expression;
}
};