2019-05-23完全平方數(shù)

···
import java.util.*;

public class Code_bsf1完全平方數(shù) {

/*這個(gè)題的整體思路是先對這個(gè)目標(biāo)數(shù)開方找到這個(gè)數(shù)最大開平方數(shù)n

然后從目標(biāo)數(shù)出發(fā)每次都減掉從 1 -- n的平方數(shù)(先把這些平方數(shù)放到一個(gè)集合中)

直到減到剩下的這個(gè)數(shù)已經(jīng)存在這個(gè)集合中了就停止就可以得到結(jié)果

*/

public static int numSquares(int n) {

int tmp = (int)Math.sqrt(n);

int res = bfs(n, tmp);

return res;

}

public static int bfs(int n, int tmp) {

int step = 0;

Queue<Integer> q = new LinkedList<Integer>(); // 隊(duì)列

Set<Integer> set = new HashSet<Integer>(); // 存放平方數(shù)的集合

q.offer(n); // 目標(biāo)數(shù)

while(!q.isEmpty()) {

step++;

int size = q.size();

for(int i = 0; i < size; i++) {

int now = q.peek();

if(set.contains(now)) { // 如果這個(gè)隊(duì)列中已經(jīng)有這個(gè)數(shù)的平方了就return

return step;

}

for(int j = 1; j <= tmp; j++) {

int sum = j * j;

if(now == sum) {

return step; // 如果這個(gè)隊(duì)列中已經(jīng)有這個(gè)數(shù)的平方了就return

}

if(now == n) { // 當(dāng)now還是目標(biāo)數(shù)的時(shí)候?qū)⑦@些平方數(shù)存入set中

set.add(sum);

}

q.offer(now - sum); // 減掉平方數(shù)

}

q.poll();

}

}

return -1;

}

public static void main(String[] args) {

System.out.println(numSquares(13));

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容