算法题每日一练---第86天:6 和 9 组成的最大数字
一、问题描述
给你一个仅由数字 6 和 9 组成的正整数 num
。
你最多只能翻转一位数字,将 6 变成 9,或者把 9 变成 6 。
请返回你可以得到的最大数字。
题目链接:6 和 9 组成的最大数字
二、题目要求
样例
输入: num = 9669
输出: 9969
解释:
改变第一位数字可以得到 6669 。
改变第二位数字可以得到 9969 。
改变第三位数字可以得到 9699 。
改变第四位数字可以得到 9666 。
其中最大的数字是 9969 。
考察
1.贪心模拟
2.建议用时10~25min
三、问题分析
这是一道比较简单的贪心问题,贪心算法本质上是每一步选择最好或者最优(即最有利)的选择
,从而希望能够导致结果是最好或者最优的算法。
这一题,要求我们最多翻转一位数字,得到最大值。
那我们首先应该从最高位开始判断,如果是6,那么就翻转成9,退出结果。
下面,第一种用的是最直观的数组方法,第二种是借助C++的一些函数。
四、编码实现
1.基础
class Solution {
public:
int maximum69Number (int num) {
int i,k=0;
vector<int>v;
while(num)//每一位数字数组存储
{
v.push_back(num%10);
num=num/10;
}
for(i=v.size()-1;i>=0;i--)//从高位开始判断
{
if(v[i]==6)
{
v[i]=9;
break;
}
}
for(i=0;i<v.size();i++)//输出结果
k+=v[i]*pow(10,i);
return k;
}
};
2.进阶
class Solution {
public:
int maximum69Number (int num) {
string s=to_string(num);//数字转字符串
int i;
for(i=0;i<s.size();i++)
{
if(s[i]=='6')//高位判断
{
s[i]='9';
break;
}
}
return stoi(s);//字符串转数字
}
};
五、测试结果
转载自:https://juejin.cn/post/7089032637888593933