置頂

我的 VPython 教學文件 (HackMD 版本)

VPython 教學文件目錄 安裝及測試 基本語法 等速度直線運動 自由落下 終端速度 水平抛射 使用For迴圈計算水平抛射資料 斜向抛射 圓周運動 簡諧運動 單擺 木塊彈簧系統分離 重力及簡諧 行星運動 相疊木塊 雙重簡諧運動 一維彈性碰撞 ...

熱門文章

2026年10月14日 星期三

LeetCode 解題筆記:3723. Maximize Sum of Squares of Digits

作者:王一哲
日期:2026年10月14日


LeetCode 題目連結:3723. Maximize Sum of Squares of Digits

解題想法


中等難度題。題目給兩個整數 $num, sum$,代表共有 $num$ 個數字,所有數字加總等於 $sum$。對於符合這兩個條件的數字,其分數為每個位數平方的加總,找出分數最高的數字並以字串格式回傳,如果無解則回傳空字串。這題下方的提示基本上已經講清楚解法,原則上盡量選用數字 9,最後再加上剩下的數字或 0,如果最後找到的答案位數大於 $num$ 無解。

Python 程式碼


用 for 迴圈依序填入數字,速度很慢。Runtime: 2761 ms, beats 5.51%. Memory: 21.24 MB, beats 59.06%.
class Solution:
    def maxSumOfSquares(self, num: int, sum: int) -> str:
        ans = ""  # 答案,字串格式
        rem = sum  # 位數加總
        # 每個位數都由 9 開始往下找,共執行 num 次
        for _ in range(num):
            for d in range(9, -1, -1):
                if rem >= d:
                    ans += str(d)
                    rem -= d
                    break
        return ans if rem == 0 else ""


計算需要填入的數字 9 數量以及餘數,速度快很多。Runtime: 4 ms, beats 74.02%. Memory: 20.87 MB, beats 90.55%.
class Solution:
    def maxSumOfSquares(self, num: int, sum: int) -> str:
        # 答案,字串格式,左側盡量用 9,如果 sum % 9 > 0,右側補上餘數
        ans = "9" * (sum // 9) + (str(sum % 9) if sum % 9 > 0 else "")
        # 長度不夠,補 0
        if len(ans) < num: ans += "0" * (num - len(ans))
        # 長度超過 num,無解
        return ans if len(ans) == num else ""


C++ 程式碼


用 for 迴圈依序填入數字,速度很慢。Runtime: 115 ms, beats 14.72%. Memory: 86.06 MB, beats 5.08%.
class Solution {
public:
    string maxSumOfSquares(int num, int sum) {
        string ans;  // 答案,字串格式
        int rem = sum;  // 位數加總
        // 每個位數都由 9 開始往下找,共執行 num 次
        for(int i = 0; i < num; i++) {
            for(int d = 9; d >= 0; d--) {
                if (rem >= d) {
                    ans += char(d + '0');
                    rem -= d;
                    break;
                }
            }
        }
        return (rem == 0 ? ans : "");
    }
};


計算需要填入的數字 9 數量以及餘數,速度快很多。Runtime: 55 ms, beats 71.57%. Memory: 85.09 MB, beats 5.08%.
class Solution {
public:
    string maxSumOfSquares(int num, int sum) {
        // 答案,字串格式,左側盡量用 9,如果 sum % 9 > 0,右側補上餘數
        string ans (sum / 9, '9');
        if (sum % 9 > 0) {
            ans += char(sum % 9 + '0');
        }
        // 長度不夠,補 0
        while((int)ans.size() < num) {
            ans += "0";
        }
        // 長度超過 num,無解
        return ((int)ans.size() == num ? ans : "");
    }
};


沒有留言:

張貼留言