算法题每日一练---第86天:6 和 9 组成的最大数字

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第21天,点击查看活动详情

一、问题描述

给你一个仅由数字 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);//字符串转数字
    }
};
复制代码

五、测试结果

1.png

2.png

猜你喜欢

转载自juejin.im/post/7089032637888593933