LeetCode 1286. 字母组合迭代器(回溯/位运算)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1286. 字母组合迭代器(回溯/位运算)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 回溯
- 2.2 位運算
1. 題目
請你設計一個迭代器類,包括以下內容:
- 一個構造函數,輸入參數包括:一個 有序且字符唯一 的字符串 characters(該字符串只包含小寫英文字母)和一個數字 combinationLength 。
- 函數 next() ,按 字典序 返回長度為 combinationLength 的下一個字母組合。
- 函數 hasNext() ,只有存在長度為 combinationLength 的下一個字母組合時,才返回 True;否則,返回 False。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/iterator-for-combination
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
2.1 回溯
- 回溯法,先全部求出來,存起來備用
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. 字母组合迭代器(回溯/位运算)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL 多表查询、连接查询(内连接、
- 下一篇: LeetCode 159. 至多包含两个