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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 1286. 字母组合迭代器(回溯/位运算)

發布時間:2024/7/5 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 1286. 字母组合迭代器(回溯/位运算) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1. 題目
    • 2. 解題
      • 2.1 回溯
      • 2.2 位運算

1. 題目

請你設計一個迭代器類,包括以下內容:

  • 一個構造函數,輸入參數包括:一個 有序且字符唯一 的字符串 characters(該字符串只包含小寫英文字母)和一個數字 combinationLength 。
  • 函數 next() ,按 字典序 返回長度為 combinationLength 的下一個字母組合。
  • 函數 hasNext() ,只有存在長度為 combinationLength 的下一個字母組合時,才返回 True;否則,返回 False。
示例: CombinationIterator iterator = new CombinationIterator("abc", 2); // 創建迭代器 iteratoriterator.next(); // 返回 "ab" iterator.hasNext(); // 返回 true iterator.next(); // 返回 "ac" iterator.hasNext(); // 返回 true iterator.next(); // 返回 "bc" iterator.hasNext(); // 返回 false提示: 1 <= combinationLength <= characters.length <= 15 每組測試數據最多包含 10^4 次函數調用。 題目保證每次調用函數 next 時都存在下一個字母組合。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/iterator-for-combination
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

2.1 回溯

  • 回溯法,先全部求出來,存起來備用
class CombinationIterator {vector<string> ans;string path;int id = 0; public:CombinationIterator(string characters, int combinationLength){dfs(characters, combinationLength, 0);}void dfs(string &s, int n, int idx){if(path.size() == n){ans.push_back(path);return;}for(int i = idx; i < s.size(); ++i){path.push_back(s[i]);dfs(s, n, i+1);//下一個字符只能更大+1開始找path.pop_back();}}string next() {return ans[id++];}bool hasNext() {return id < ans.size();} };

32 ms 12.8 MB

2.2 位運算

class CombinationIterator {int bits;string s;int len; public:CombinationIterator(string characters, int combinationLength) {s = characters;bits = (1<<s.size())-1;len = combinationLength;}int countOne(int n){int count = 0;while(n){count++;n = n & (n-1);}return count;}string next() {while(bits > 0 && countOne(bits) != len)bits--;string t;for(int i = s.size()-1; i >= 0; --i){if((bits>>i)&1)t += s[s.size()-i-1];//字符串是從左往右的,序號0開始}bits--;//下一個數,下次搜索的起點return t;}bool hasNext() {while(bits > 0 && countOne(bits) != len)bits--;return bits > 0;} };

20 ms 12 MB

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的LeetCode 1286. 字母组合迭代器(回溯/位运算)的全部內容,希望文章能夠幫你解決所遇到的問題。

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