[Leetcode] #279 Perfect Squares (BFS, DP)
Discription
Given a positive integer n, find the least number of perfect square numbers (for example,
1, 4, 9, 16, ...
) which sum to n. For example, given n =
12
, return 3
because 12 = 4 + 4 + 4
; given n = 13
, return 2
because 13 = 4 + 9
. Solution
int numSquares(int n) { //BFS
int sn = sqrt(n);
if (sn*sn == n)
return 1;
vector square, state(n + 1, 0);
queue que;
for (int i = 1; i <= sn; i++){
square.push_back(i*i);
que.push(i*i);
state[i*i] = 1;
}
while (!que.empty()){
int x = que.front();
que.pop();
for (int i : square){
if (x + i <= n && state[x + i] == 0){
state[x + i] = state[x] + 1;
que.push(x + i);
}
}
}
return state[n];
}
int numSquares(int n) { //DP
vector dp(n+1,0);
for (int i = 1; i <= n; i++){
int square = INT_MAX;
for (int j = 1; j*j <= i; j++)
square = min(square, dp[i - j*j] + 1);
dp[i] = square;
}
return dp[n];
}
GitHub-Leetcode: https://github.com/wenwu313/LeetCode
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.