日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【LeetCode笔记】279. 完全平方数(Java、动态规划)

發布時間:2024/7/23 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode笔记】279. 完全平方数(Java、动态规划) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 題目描述
  • 思路 & 代碼

題目描述

  • 類似找零錢,思路和代碼框架基本上一樣

思路 & 代碼

  • 考慮到這么一點:某完全平方數,肯定是由另一更小的完全平方數 + 一平方組成
  • 比如 16 = 8 + 4 = (完全平方數8=22+22)+22(完全平方數8=2^2 + 2^2) + 2^2(8=22+22)+22
  • 那么好辦了,直接用dp沖!
class Solution {/*** 動態規劃,dp[i]代表 i 的完全平方數的最少數量* 如何考慮?比如 dp[12] = dp[8] + 1 (此處為 2 * 2)* 也就是一個數,一定是由某一個較小數的完全平方數 加上 一個整數的平方組成的*/public int numSquares(int n) {int[] dp = new int[n + 1];// 時間復雜度O(n * sqrt(n))for(int i = 1; i <= n; i++){// 初始化:使用最差情況,全為 1^2 組成dp[i] = i;for(int j = 1; i - j * j >= 0; j++){// 下式中 + 1 就是 j * jdp[i] = Math.min(dp[i], dp[i - j * j] + 1);}}return dp[n];} }
  • 時間復雜度為O(n * sqrt(n)),代碼重點是for j的循環結束條件 & 狀態轉移方程
  • 無注釋版
class Solution {public int numSquares(int n) {int[] ans = new int[n + 1];for(int i = 1; i <= n; i++) {ans[i] = i;for(int j = 1; j * j <= i; j++) {ans[i] = Math.min(ans[i], ans[i - j * j] + 1);}}return ans[n];} }

總結

以上是生活随笔為你收集整理的【LeetCode笔记】279. 完全平方数(Java、动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。