1. 程式人生 > 其它 >leetcode 完全平方數 中等

leetcode 完全平方數 中等

① dp:完全揹包,沒啥好說的

② bfs:有很重要的一點,在 bfs 中的迴圈中提前判斷是否到達 0,能夠減少很多計算。是減少很多很多!!!

③數學題:不記錄。

dp:

class Solution {
public:
    int numSquares(int n) {
        vector<int> dp(n + 1, INT_MAX);   // 組成 i 所用的最少的數個數
        dp[0] = 0;
        for(int i = 1; i <= n; ++ i) {
            for(int j = 1; j * j <= i; ++ j) {
                dp[i] 
= min(dp[i], dp[i - j * j] + 1); } } return dp[n]; } };

bfs:

class Solution {
public:
    int numSquares(int n) {
        queue<pair<int, int>> que;
        que.push({n, 0});
        vector<bool> tag(n + 1, false);
        while(!que.empty()) {
            auto front 
= que.front(); que.pop(); for(int i = sqrt(front.first); i >= 1; -- i) { if(front.first == i * i) return front.second + 1; // 可少跑很多資料 if(tag[front.first - i * i]) continue; // 可少跑很多資料 tag[front.first - i * i] = true; que.push({front.first
- i * i, front.second + 1}); } } return -1; } };