首页 > 其他分享 >leetcode-3211. 生成不含相邻零的二进制字符串

leetcode-3211. 生成不含相邻零的二进制字符串

时间:2024-10-29 14:47:30浏览次数:7  
标签:3211 二进制 back dfs pop str 字符串 长度 leetcode

leetcode-3211. 生成不含相邻零的二进制字符串

给你一个正整数 n

如果一个二进制字符串 x 的所有长度为 2 的子字符串中包含 至少 一个 "1",则称 x 是一个 有效 字符串。

返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。

思路:所有长度为2的子字符串都包含1,也就是说,所有子字符串都不会存在相邻的两个0
使用dfs来对答案进行搜索,并根据前一个位置是否存在,是否为1,来防止当前位置的元素,最后把长度为n的符合要求的字符串添加到结果中。

class Solution {
public:
    vector<string> validStrings(int n) {
    	// 记录满足要求的结果
        vector<string> ans;
		
		// dfs 函数,搜索答案
        function<void(int, string)> dfs = [&](int i, string str) {
        	// 如果 下标==n,代表当前字符串长度为n,加入答案数组,并终止该分支执行
            if (i == n) {
                ans.push_back(str);
                return ;
            }

			// 如果当前为第一个元素,则有两种添加方式,1 或 0
            if (str.size() == 0) {
                str += '0';
                // 递归
                dfs(i + 1, str);
                // 回溯
                str.pop_back();

                str += '1';
                dfs(i + 1, str);
                str.pop_back();
            } else {
            	// 如果当前不为第一个元素,且 str 中最后一个元素为 1,当前位置才可以放 0
                if (str.back() == '1') {
                    str += '0';
                    dfs(i + 1, str);
                    str.pop_back();
                }
                // 当前不为第一个元素,可以直接放 1
                str += '1';
                dfs(i + 1, str);
                str.pop_back();
            }
        };
        
		// 开始进行 dfs 搜索,初始时,下表为 0,字符串为""
        dfs(0, "");

        return ans;
    }
};

标签:3211,二进制,back,dfs,pop,str,字符串,长度,leetcode
From: https://blog.csdn.net/qq_53982633/article/details/143329116

相关文章

  • LeetCode 202 - 快乐数
    题目描述编写一个算法来判断一个数 n 是不是快乐数。「快乐数」 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或者进入一个无限循环但始终变不到1。如果这个过程的结果为1,那么这个数就是快乐数。如果 n 是快乐......
  • Leetcode 3336. Find the Number of Subsequences With Equal GCD
    Leetcode3336.FindtheNumberofSubsequencesWithEqualGCD1.解题思路2.代码实现题目链接:3336.FindtheNumberofSubsequencesWithEqualGCD1.解题思路这一题没能自力搞定,挺伤心的,看大佬的代码之后发现思路上是一个非常暴力的动态规划,就是不断地考察每一......
  • 闯关leetcode——222. Count Complete Tree Nodes
    大纲题目地址内容解题代码地址题目地址https://leetcode.com/problems/count-complete-tree-nodes/description/内容Giventherootofacompletebinarytree,returnthenumberofthenodesinthetree.AccordingtoWikipedia,everylevel,exceptpos......
  • Leetcode : 684. 冗余连接
    >Problem:684.冗余连接题解:冗余连接(RedundantConnection)题目描述给定一棵包含n个节点的树(节点值为1到n),向树中添加一条边后形成一个图。你的任务是找出一条可以删除的边,使得删除后剩余部分仍然是一棵有n个节点的树。如果有多个答案,返回在输入数组edges中......
  • 代码随想录算法训练营第十一天|leetcode150. 逆波兰表达式求值、leetcode239. 滑动窗
    1leetcode150.逆波兰表达式求值题目链接:150.逆波兰表达式求值-力扣(LeetCode)文章链接:代码随想录视频链接:栈的最后表演!|LeetCode:150.逆波兰表达式求值_哔哩哔哩_bilibili自己的思路:这是一道有思路,但是思路并不多的题目,就是我会觉得是先将数据进行添加,然后对于符号通过倒......
  • 【从零开始的LeetCode-算法】713. 乘积小于 K 的子数组
    给你一个整数数组nums和一个整数k,请你返回子数组内所有元素的乘积严格小于k的连续子数组的数目。示例1:输入:nums=[10,5,2,6],k=100输出:8解释:8个乘积小于100的子数组分别为:[10]、[5]、[2]、[6]、[10,5]、[5,2]、[2,6]、[5,2,6]。需要注意的是[10,5,2]并不......
  • 【从零开始的LeetCode-算法】649. Dota2 参议院
    Dota2的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)Dota2参议院由来自两派的参议员组成。现在参议院希望对一个Dota2游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位......
  • leetCode-深度优先遍历
    岛屿数量深度优先遍历classSolution{publicintnumIslands(char[][]grid){intxlen=grid[0].length;intylen=grid.length;intcount=0;for(intx=0;x<xlen;x++){for(inty=0;y<ylen;y++){......
  • 抖音发送私信接口响应的二进制数据解析
    请求发送评论接口得到:data=b'ap`\x00\x97\xce\xaa(\xef\xaa\xcd\x98[\xe1\x07\xcex\xd3%\xa4\x06z\x07$N\x12c\xde\x9b\xf0\xb2\xff\xb6&\xcb\xce\xfc\xd5~\xbf\xd0=\x94\x1e\xda\x9e|\xc7\xfcED\xf4\xeePI.\xc94\x99G\xb1D\xc8d......
  • leetCode-双指针
     移动零classSolution{publicvoidmoveZeroes(int[]nums){intn=nums.length;intslow=0;intfast=0;while(fast<n){if(nums[fast]!=0){nums[slow++]=nums[fast++];......