leetcode 279. 完全平方數

給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等于 n。你需要讓組成和的完全平方數的個數最少。

示例 1:
輸入: n = 12
輸出: 3 
解釋: 12 = 4 + 4 + 4.
示例 2:
輸入: n = 13
輸出: 2
解釋: 13 = 4 + 9.

思路:
visited=[False(n)]:一組長度為n的False數組,用來記錄visited[i]是否已經被訪問。因為后面訪問到相同數值的話,step的長度肯定是大于之前的step。所以被訪問過一個數值i就把visited[i]置為True。
res[[n,step]]:記錄數值和其經過的step;
每次pop出res第一個數值,循環(huán)遍歷其完全平方數。

class Solution(object):
    def numSquares(self, n):
        """
        :type n: int
        :rtype: int
        """
        res = [];
        res.append([n,0]);
        visited = [False for _ in range(n+1)];
        visited[n] = True;
        while res:
            tmp,step = res.pop(0);
            i = 1;
            muti = tmp - i*i;
            while muti >= 0:
                if muti == 0:
                    return step + 1;
                if not visited[muti]:
                    res.append([muti,step+1]);
                    visited[muti] = True;
                i += 1;
                muti = tmp - i*i;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容