LintCode 188: Insert five

188. Insert five

Given a number, insert a 5 at any position of the number to make the number after insertion the largest

Example

Example 1:

Input:  a = 234

Output: 5234

Notice

|a| ≤ 10^6

解法1:先弄成字符串再处理比较方便。
注意分正数和负数两种情况考虑。

class Solution {
public:
    /**
     * @param a: A number
     * @return: Returns the maximum number after insertion
     */
    int InsertFive(int a) {
        string a_str = to_string(a);

        bool occured = false;
        int n = a_str.size();
        if (a >= 0) {
            for (int i = 0; i < n; ++i) {
                if (a_str[i] == '+') continue;
                if (a_str[i] - '0' < 5) {
                    a_str.insert(i, "5");
                    occured = true;
                    break;
                }
            }
            if (!occured) a_str = a_str + '5';
        } else {
            for (int i = 0; i < n; ++i) {
                if (a_str[i] == '-') continue;
                if (a_str[i] - '0' > 5) {
                    a_str.insert(i, "5");
                    occured = true;
                    break;
                }
            }
            if (!occured) {
                a_str = a_str + '5';
            }
        }
        return atoi(a_str.c_str());
    }
};

二刷:

class Solution {
public:
    /**
     * @param a: A number
     * @return: Returns the maximum number after insertion
     */
    int insertFive(int a) {
        bool isNeg = a < 0 ? true : false;
        if (isNeg) a = -a;
        string aStr = to_string(a);
        int pos = -1;
        for (int i = 0; i < aStr.size(); i++) {
            if (isNeg) {
                if (aStr[i] - '0' > 5) {
                    cout << " pos  =" << pos << endl;
                    pos = i;
                    break;
                }
            }
            else if (aStr[i] - '0' < 5) {
                pos = i;
                break;
            }
        }
        if (pos == -1) {
            if (isNeg) aStr = aStr + '5';
            else aStr = '5' + aStr;
        } else {
            aStr = aStr.substr(0, pos) + '5' + aStr.substr(pos);
        }
        return isNeg ? -stoi(aStr) : stoi(aStr);
    }
};

​​ 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值