1432 改變一個整數能得到的最大差值
阿新 • • 發佈:2021-02-12
技術標籤: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 中。
現在,我們有 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;
}
};