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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 38外观数列39组合总和

發布時間:2025/3/20 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 38外观数列39组合总和 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

維護公眾號:bigsai 回復bigsai分享一些學習資源!
本周上篇 LeetCode 36有效的數獨&37解數獨(八皇后問題)

外觀數列

給定一個正整數 n(1 ≤ n ≤ 30),輸出外觀數列的第 n 項。
注意:整數序列中的每一項將表示為一個字符串。
「外觀數列」是一個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下:

1. 1 2. 11 3. 21 4. 1211 5. 111221

第一項是數字 1
描述前一項,這個數是 1 即 “一個 1 ”,記作 11
描述前一項,這個數是 11 即 “兩個 1 ” ,記作 21
描述前一項,這個數是 21 即 “一個 2 一個 1 ” ,記作 1211
描述前一項,這個數是 1211 即 “一個 1 一個 2 兩個 1 ” ,記作 111221

示例 1:

輸入: 1
輸出: “1”
解釋:這是一個基本樣例。

示例 2:

輸入: 4
輸出: “1211”
解釋:當 n = 3 時,序列是 “21”,其中我們有 “2” 和 “1” 兩組,“2” 可以讀作 “12”,也就是出現頻次 = 1 而 值 = 2;類似 “1” 可以讀作 “11”。所以答案是 “12” 和 “11” 組合在一起,也就是 “1211”。

分析:
水題,我們只需要模擬流程即可,這個流程也很簡單,每次直接從前往后枚舉即可,枚舉的每個小間斷尋找一個元素,知道元素內容和個數之后添加到新串后面即可。

對于實現的代碼,別用String就行,這里先用了StringBuilder:

public String countAndSay(int n) {if(n==1)return "1";StringBuilder sBuilder=new StringBuilder("1");while (--n>0) {StringBuilder s2=new StringBuilder();int index=1;int i=0;for(i=0;i<sBuilder.length()-1;i++){if(sBuilder.charAt(i)==sBuilder.charAt(i+1))index++;else {s2.append(index).append(sBuilder.charAt(i));index=1;}}s2.append(index).append(sBuilder.charAt(i));//System.out.println(sBuilder.toString()+" "+i);sBuilder=s2; }return sBuilder.toString();}

效果的話一般般3ms

使用數組存儲直接操作會更快一些:

class Solution {public String countAndSay(int n) {if(n==1)return "1";int a[]=new int[5000];a[0]=1;int b[]=new int[5000];int len=1;int index=0;while (--n>0) {int num=1;int i=0;for(i=0;i<len-1;i++){if(a[i]==a[i+1])num++;else {b[index++]=num;b[index++]=a[i];num=1;}}b[index++]=num;b[index++]=a[i];//交換int team[]=a;a=b;b=team;len=index;index=0;}StringBuilder sBuilder=new StringBuilder("");for(int j=0;j<len;j++){sBuilder.append(a[j]);}return sBuilder.toString();} }

組合總和

題目

給定一個無重復元素的數組 candidates 和一個目標數 target ,找出 candidates 中所有可以使數字和為 target 的組合。
candidates 中的數字可以無限制重復被選取。

說明:

所有數字(包括 target)都是正整數。
解集不能包含重復的組合。

示例 1:輸入:candidates = [2,3,6,7], target = 7, 所求解集為: [[7],[2,2,3] ] 示例 2:輸入:candidates = [2,3,5], target = 8, 所求解集為: [[2,2,2,2],[2,3,3],[3,5] ]

提示:

1 <= candidates.length <= 30
1 <= candidates[i] <= 200
candidate 中的每個元素都是獨一無二的。
1 <= target <= 500

分析,這題的話首先搞懂題意:

  • 數組元素不相等
  • 數組中任意湊使得數據等于target
  • 每個數值可以用任意多次
  • 最終的序列不能重復,需要去重或者采取合理措施

對于這種需要不斷試探列舉的題,肯定是回溯算法沒錯了,回溯也是經典dfs算法的一種,在本題的回溯過程中, 需要用一個List儲存數值,在回溯向下的過程就加入合法元素,回來之后要把對應元素刪除復原。如果當前列表中數值總和和target相等,那么需要將它添加到結果集中。

對于回溯的過程我們應該如何考慮呢,初試狀態從0開始,下一次從何開始呢?從當前index開始。因為最終序列不能有重復,所以下一次回溯遞歸需要從它當前編號開始不能從0開始

比如 2 3 8 組成8,從2 開始有2 2 2 2,2 3 3,從3開始如果3 2 3或者3 3 2其實都已經重復了,換言之2這個元素作為元素首位已經被使用過,其他在它后面的元素再回溯的時候不需要再經過它,所以從3開始正確應該是3 3 3試探失敗3 8試探失敗而回去。


思路搞明白之后,直接giao代碼就可以了,附上代碼:

List<Integer>list=new ArrayList<Integer>();//list用來回溯過程中儲存元素 List<List<Integer>> val=new ArrayList<List<Integer>>();//結果 public List<List<Integer>> combinationSum(int[] candidates, int target) {dfs(0,0,candidates,target);return val; }/** index 表示當前編號 count 表示當前數值的和*/ private void dfs(int index,int count, int[] candidates, int target) { if(target==count) {List<Integer>vaList=new ArrayList<Integer>();vaList.addAll(list);val.add(vaList); } for(int i=index;i<candidates.length;i++) {if(count+candidates[i]<=target){list.add(candidates[i]);dfs(i, count+candidates[i], candidates, target);list.remove(list.size()-1);} } }

一發AC還是可以的。

好了,本周的打卡介紹了,感覺不錯歡迎一鍵三聯,有其他方法還請留言,如果有興趣加入打卡歡迎加筆者微信q1315426911拉你進群.

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的LeetCode 38外观数列39组合总和的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 激情高潮呻吟抽搐喷水 | 亚洲一本在线 | 亚洲综合伊人久久 | 精品国产视频一区二区三区 | 精品无码三级在线观看视频 | aa一级片| 日韩欧美精品一区二区三区 | 成人av在线网| 美女黄色一级视频 | 三年中文在线观看免费观看 | 五月香婷婷 | 亚洲激情欧美色图 | 日韩av电影在线播放 | 欧美成人精品激情在线观看 | 哺乳喂奶一二三区乳 | 美女一区二区三区视频 | 欧美三根一起进三p | 午夜看片福利 | 午夜日韩| caoprom97| 国产69久久 | 久久大片 | 男人天堂2019 | 日本国产高清 | 青青视频免费看 | 不卡影院一区二区 | 亚洲第一网址 | 涩涩网站在线看 | 天堂…中文在线最新版在线 | 成人国产av一区二区三区 | 久久夜夜操 | 夜夜骚av一区二区三区 | 日韩中文字幕有码 | 成人做爰66片免费看网站 | 国产叼嘿视频在线观看 | 看毛片视频 | 色牛av| 欧美专区第一页 | 精品国产999久久久免费 | 日韩在线第一区 | 99爱国产 | 午夜av激情| 亚洲理伦电影 | 亚洲第一黄色网址 | 最新国产视频 | 青草操 | 一级看片 | 亚洲国产精品久久久久久 | 亚洲AV综合色区无码国产播放 | 欧美激情视频一区二区 | 污污动态图 | 亚洲午夜精品一区二区三区 | 欧美九九 | 日韩视频在线免费观看 | 色七七亚洲| 美女尻逼视频 | 亚洲精品91天天久久人人 | 国产va在线 | 69堂精品 | 亚洲综合少妇 | 9l视频自拍九色9l视频成人 | 一本色道综合久久欧美日韩精品 | 午夜影视网 | 女人脱下裤子让男人捅 | 天天艹av | 黄色一级免费大片 | 大肉大捧一进一出好爽视频 | 国产一区二区三区黄 | 亚洲人成电影一区二区在线 | 四虎在线视频免费观看 | 美女扒开尿口给男人捅 | 免费无码国产v片在线观看 三级全黄做爰在线观看 | 亚洲一二三区av | 久久99久 | videos亚洲| 3d毛片 | 什么网站可以看毛片 | 欧美xxxx888| 热久久亚洲 | 亚洲天堂精品视频 | 女上男下动态图 | 日韩精品一区二区三区不卡在线 | 欧美aaa在线观看 | 欧美日韩一级二级三级 | 天堂一区| 国产一级特黄视频 | 国产精品99一区二区三区 | 日韩av一卡二卡 | 中文字幕一区二区在线视频 | 国产一区二区免费在线观看 | 黄色一级小说 | 91精品视频免费看 | 亚洲字幕成人中文在线观看 | 成人福利午夜 | 九一九色国产 | 99视频久久 | 色淫湿视频 | 午夜老司机免费视频 | 又黄又爽视频在线观看 |