1. 程式人生 > 遊戲攻略 >《小緹娜的奇幻之地》利爪霜戰士加點參考

《小緹娜的奇幻之地》利爪霜戰士加點參考

✅做題思路or感想

少有的二刷小障礙

大體思路是:為了讓後面的數單調遞減,最簡單的方法就是把後面小的數直接改成9,讓前面的數-1(相當於直接借了一位給後面,借一位給後面是最簡單的方法了)

當然這道題還得先要老生常談的化為字串,才能對上面的數字實施精準修改

class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        //先轉化成字串再操作
        string str = to_string(n);
        //Index代表的是[Index, str.size() - 1]這一段的數都是不符合要求的數,則需要把這個區間都變成9(貪心)
        //這裡設定str.size()是有門道的
        //如果有發生Index的值變化,則無所謂。若沒有發生值變化,則區間[str.size(), str.size() - 1]是不存在的,故也不會發生轉換9的操作
        int Index = str.size();	
        for (int i = str.size() - 1; i > 0; i--) {
            if (str[i - 1] > str[i]) {
                Index = i;
                //向前一位借1
                str[i - 1]--;
            }
        }
        //轉化[Index, str.size() - 1]為9
        for (int i = Index; i < str.size(); i++) {
            str[i] = '9';
        }
        return stoi(str);
    }
};