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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 64最小路径和65有效数字66加一

發(fā)布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 64最小路径和65有效数字66加一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原創(chuàng)公眾號:bigsai 專注于Java、數據結構與算法,一起進大廠不迷路!
關注后回復進群即可加入力扣打卡群,歡迎劃水。近期打卡:
LeetCode打卡 52八皇后Ⅱ&53最大子序和&54螺旋矩陣
LeetCode 55跳躍游戲&56合并區(qū)間&57插入區(qū)間
跟我打卡LeetCode 58最后一個單詞長度&59螺旋矩陣Ⅱ&60排列序列
跟我打卡LeetCode 61旋轉鏈表&62不同路徑&63不同路徑 II

最小路徑和

簡單的動態(tài)規(guī)劃,只能向右或者向下,所以可以使用動態(tài)規(guī)劃動態(tài)的找到最小路徑和,先對第一行和第一列特殊處理,然后順序遍歷數組的時候狀態(tài)轉移方程為:

dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];

其中dp[i][j]意為第i行第j列的最小路徑和。
具體代碼為:

public int minPathSum(int[][] grid) {int m=grid.length;int n=grid[0].length;int dp[][]=new int[m][n];dp[0][0]=grid[0][0];//先初始化第0行和第0列for(int i=1;i<n;i++){dp[0][i]=dp[0][i-1]+grid[0][i];}for(int j=1;j<m;j++){dp[j][0]=dp[j-1][0]+grid[j][0];}//System.out.println(Arrays.deepToString(dp));for(int i=1;i<m;i++){for(int j=1;j<n;j++){dp[i][j]=Math.min(dp[i-1][j],dp[i][j-1])+grid[i][j];}}return dp[m-1][n-1];}

有效數字

驗證給定的字符串是否可以解釋為十進制數字。

例如:

"0" => true " 0.1 " => true "abc" => false "1 a" => false "2e10" => true " -90e3 " => true " 1e" => false "e3" => false " 6e-1" => true " 99e2.5 " => false "53.5e93" => true " --6 " => false "-+3" => false "95a54e53" => false說明: 我們有意將問題陳述地比較模糊。在實現代碼之前,你應當事先思考所有可能的情況。 這里給出一份可能存在于有效十進制數字中的字符列表:數字 0-9 指數 - "e" 正/負號 - "+"/"-" 小數點 - "." 當然,在輸入中,這些字符的上下文也很重要。

更新于 2015-02-10:
C++函數的形式已經更新了。如果你仍然看見你的函數接收 const char * 類型的參數,請點擊重載按鈕重置你的代碼。

分析
這題其實挺麻煩的,我也是根據樣例不停的測試然后才最終得到正確的結果。這些數字和符號有一定的規(guī)律和要求。 我的分析就是將數字分成三塊 e前,e,e后。而每個數字可能是符號數字小數點等組成需要滿足一定規(guī)律。符號可以沒有,但是數字必須有! 具體可以參考這張圖:

實現代碼為:

public boolean isNumber(String s) {s=s.trim();char str[]=s.toCharArray();boolean smallpoint=false;//小數點boolean ise=false;//是否遇到eint localindex=0;//當前數字指標// 整體思路 左側部分 e 右側部分for(int i=0;i<str.length;i++){if(localindex==0&&(str[i]=='+'||str[i]=='-'))// + -號必須出現在前面 也就是localindex=0{if(smallpoint)return false; //小數點后不能有+- 例如0.+3continue;//否則繼續(xù)}else if (str[i]=='.') {if(smallpoint||ise)//當有小數點或者在e后面 不能3.12.5 也不能1e2.3return false;else {smallpoint=true;//否則將標記出現過小數點}}else if ((str[i]=='e'||str[i]=='E')&&localindex>0) {//遇到eif(ise)return false;//如果已經有e 那么返回false 不能 4e5eelse {smallpoint=false;//否則說明正常,開始統(tǒng)計e右側部分。e右側部分開始重新統(tǒng)計ise=true;//標記e已經出現localindex=0;//數字編號}}else if (str[i]>='0'&&str[i]<='9') {localindex++;}else {return false;}}if (localindex>0) {return true;}else return false;}

還有這種方法就是有限狀態(tài)機(DFA)解決,具體解釋看題解吧:

圖片來源力扣題解

class Solution {public int make(char c) {switch(c) {case ' ': return 0;case '+':case '-': return 1;case '.': return 3;case 'e': return 4;default:if(c >= 48 && c <= 57) return 2;}return -1;}public boolean isNumber(String s) {int state = 0;int finals = 0b101101000;int[][] transfer = new int[][]{{ 0, 1, 6, 2,-1},{-1,-1, 6, 2,-1},{-1,-1, 3,-1,-1},{ 8,-1, 3,-1, 4},{-1, 7, 5,-1,-1},{ 8,-1, 5,-1,-1},{ 8,-1, 6, 3, 4},{-1,-1, 5,-1,-1},{ 8,-1,-1,-1,-1}};char[] ss = s.toCharArray();for(int i=0; i < ss.length; ++i) {int id = make(ss[i]);if (id < 0) return false;state = transfer[state][id];if (state < 0) return false;}return (finals & (1 << state)) > 0;} }作者:user8973 鏈接:https://leetcode-cn.com/problems/valid-number/solution/biao-qu-dong-fa-by-user8973/ 來源:力扣(LeetCode)

加一

給定一個由 整數 組成的 非空 數組所表示的非負整數,在該數的基礎上加一。

最高位數字存放在數組的首位, 數組中每個元素只存儲單個數字。

你可以假設除了整數 0 之外,這個整數不會以零開頭。

示例 1:

輸入:digits = [1,2,3]
輸出:[1,2,4]
解釋:輸入數組表示數字 123。

示例 2:

輸入:digits = [4,3,2,1]
輸出:[4,3,2,2]
解釋:輸入數組表示數字 4321。

示例 3:

輸入:digits = [0]
輸出:[1]

提示:

1 <= digits.length <= 100
0 <= digits[i] <= 9

分析:簡單題,只需要本本分分模擬即可,將數組最后一位加一,如果產生進位一直向前判斷是否還需要進位。有一個需要注意的地方就是如果結束第0位也需要進位那么需要重新創(chuàng)建數組擴容賦值返回。

實現代碼:

class Solution {public int[] plusOne(int[] digits) {if(digits [digits.length-1]++==9)for(int i=digits.length-1;i>0;i--){digits[i]=0;if(++digits[i-1]!=10)break;}if(digits[0]==10){int value[]=new int[digits.length+1];digits[0]=0;value[0]=1;System.arraycopy(digits,0,value,1,digits.length);return value;}return digits;} }

原創(chuàng)不易,bigsai請你幫兩件事幫忙一下:

  • 點贊、在看、分享支持一下, 您的肯定是我創(chuàng)作的源源動力。

  • 微信搜索「bigsai」,關注我的公眾號,不僅免費送你電子書,我還會第一時間在公眾號分享知識技術。加我還可拉你進力扣打卡群一起打卡LeetCode。

  • 記得關注、咱們下次再見!

    總結

    以上是生活随笔為你收集整理的LeetCode 64最小路径和65有效数字66加一的全部內容,希望文章能夠幫你解決所遇到的問題。

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