1. 程式人生 > 其它 >1432 改變一個整數能得到的最大差值

1432 改變一個整數能得到的最大差值

技術標籤:LeetCode

題目描述:
給你一個整數 num 。你可以對它進行如下步驟恰好 兩次 :
選擇一個數字 x (0 <= x <= 9).
選擇另一個數字 y (0 <= y <= 9) 。數字 y 可以等於 x 。
將 num 中所有出現 x 的數位都用 y 替換。
得到的新的整數 不能 有前導 0 ,得到的新整數也 不能 是 0 。
令兩次對 num 的操作得到的結果分別為 a 和 b 。
請你返回 a 和 b 的 最大差值 。

示例 1:
輸入:num = 555
輸出:888
解釋:第一次選擇 x = 5 且 y = 9 ,並把得到的新數字儲存在 a 中。

第二次選擇 x = 5 且 y = 1 ,並把得到的新數字儲存在 b 中。
現在,我們有 a = 999 和 b = 111 ,最大差值為 888

示例 2:
輸入:num = 9
輸出:8
解釋:第一次選擇 x = 9 且 y = 9 ,並把得到的新數字儲存在 a 中。
第二次選擇 x = 9 且 y = 1 ,並把得到的新數字儲存在 b 中。
現在,我們有 a = 9 和 b = 1 ,最大差值為 8

示例 3:
輸入:num = 123456
輸出:820000

示例 4:

輸入:num = 10000
輸出:80000

示例 5:
輸入:num = 9288
輸出:8700

提示:
1 <= num <= 10^8

方法1:
主要思路:解題連結彙總
(1)先將原數進行分解,獲得各個位上的數字;
(2)分別找出最大數和最小數,相減即可;

class Solution {
public:
    int maxDiff(int num) {
        vector<int> res;
        while(num){//將原數字進行分解
            res.push_back(num%10);
            num/=10;
        }
		
		//找出最大數字,從最高位開始,找到非9的數字,對應的改為9
        int cur=res.back();
        for
(int i=res.size()-1;i>=0;--i){ if(res[i]!=9){ cur=res[i]; break; } } int num1=0; for(int i=res.size()-1;i>=0;--i){ num1*=10; if(res[i]==cur){ num1+=9; } else { num1+=res[i]; } } //找出最小數字 int num2=0; if(res.back()==1){//最高位為1 cur=10; for(int i=res.size()-1;i>=0;--i){ if(res[i]!=1&&res[i]!=0){ cur=res[i]; break; } } for(int i=res.size()-1;i>=0;--i){ num2*=10; if(res[i]==cur){ num2+=0; } else { num2+=res[i]; } } } else{//最高位非1 cur=res.back(); for(int i=res.size()-1;i>=0;--i){ num2*=10; if(res[i]==cur){ num2+=1; } else { num2+=res[i]; } } } return num1-num2; } };