首页 > 其他分享 >Leetcode每日一题C之3211. 生成不含相邻零的二进制字符串

Leetcode每日一题C之3211. 生成不含相邻零的二进制字符串

时间:2024-10-30 23:16:25浏览次数:7  
标签:count index char 3211 int current 字符串 一题 Leetcode

1、执行结果:通过

2、显示详情

3、题目:  

给你一个正整数 n

如果一个二进制字符串 x 的所有长度为 2 的子字符串中包含 至少 一个 "1",则称 x 是一个 有效 字符串。返回所有长度为 n 的 有效 字符串,可以以任意顺序排列。

示例 1:

输入: n = 3

输出: ["010","011","101","110","111"]

解释:

长度为 3 的有效字符串有:"010""011""101""110" 和 "111"

示例 2:

输入: n = 1

输出: ["0","1"]

解释:

长度为 1 的有效字符串有:"0" 和 "1"

提示:

  • 1 <= n <= 18

4、思路:

可以用递归的方法来生成所有的二进制字符串并检查它们是否符合条件(所有长度为 2 的子字符串中包含 至少 一个 "1"),调用 generateStrings递归地生成所有有效的字符串,索引index为n时返回并将count加1,得到结果字符串的第一个字符串,直到输出所有的字符串。

1、当 index 为 0 时,可以选择 0 或 1 作为起始字符。选择0,有if(index ==0 || current[index-1]== '1'),选择1,if语句后面有 current[index] = '1';

2、如果前一个字符为 '1',则可以选择 0 或 1 作为当前字符。

3、如果前一个字符为 '0',则只能选择 '1',以确保所有长度为 2 的子字符串中包含至少一个 '1' 

代码如下

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
void generateString(char* current,int index,int n,char** result,int* count){
    if(index==n){
        result[*count]=(char*)malloc((n+1)*sizeof(char));
        strcpy(result[*count],current);
        (*count) ++;
        return ;
    }
    if(index ==0 || current[index-1]== '1'){
        current[index] = '0';
        generateString(current, index + 1, n, result, count);

    }
    current[index] = '1';
    generateString(current, index + 1, n, result, count);

}

char** validStrings(int n, int* returnSize) {
    int count=0;
    char** result = (char**)malloc( (1<<n)* sizeof(char*));
    char* current = (char*)malloc( (n+1) * sizeof(char));
    current[n] = '\0';
    generateString(current,0,n,result,&count);
    free(current);
    *returnSize = count;
    return result;  
}

标签:count,index,char,3211,int,current,字符串,一题,Leetcode
From: https://blog.csdn.net/weixin_49189257/article/details/143332954

相关文章

  • Leetcode每日一题C之3216. 交换后字典序最小的字符串
     1、执行结果:通过2、显示详情:3、题目:  给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的字典序最小的字符串。如果两个数字都是奇数或都是偶数,则它们具有相同的奇偶性。例如,5和9、2和4奇偶性相同,而6和9奇偶......
  • LeetCode Hot 100:多维动态规划
    LeetCodeHot100:多维动态规划62.不同路径思路1:动态规划classSolution{public:intuniquePaths(intm,intn){if(m==1||n==1)return1; //dp[i][j]:到达(i,j)的不同路径数vector<vector<int>>dp(m+1,vec......
  • LeetCode Hot 100:技巧
    LeetCodeHot100:技巧136.只出现一次的数字思路1:哈希表classSolution{public:intsingleNumber(vector<int>&nums){unordered_map<int,int>hashMap;for(int&num:nums)hashMap[num]++;for(auto&[x,......
  • 代码随想录算法训练营第六天| leetcode242.有效的字母异位词、leetcode349.两个数组的
    1.leetcode242.有效的字母异位词题目链接:242.有效的字母异位词-力扣(LeetCode)文章链接:代码随想录视频链接:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词哔哩哔哩bilibili自己的思路:首先就是对字符串进行分开成一个一个单独的字母,然后使用列表存储这些数据,再对......
  • 【LeetCode】两数之和、大数相加
    主页:HABUO......
  • leetcode155. 最小栈
    设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类:MinStack() 初始化堆栈对象。voidpush(intval) 将元素val推入堆栈。voidpop() 删除堆栈顶部的元素。inttop() 获取堆栈顶部的元素。intgetMin() 获取堆栈中的最小元素......
  • Leetcode 3216. 交换后字典序最小的字符串
    因为字符串长度只有100,所以直接模拟就行了。字符串比较不想写的话,可以用C的strcmp1classSolution{2public:3stringswap(string&s,inti,intj){4stringres="";5for(intk=0;k<i;k++)6res+=s[k];7res+=s[j];......
  • [LeetCode] 3216. Lexicographically Smallest String After a Swap
    Givenastringscontainingonlydigits,returnthelexicographicallysmalleststringthatcanbeobtainedafterswappingadjacentdigitsinswiththesameparityatmostonce.Digitshavethesameparityifbothareoddorbothareeven.Forexample,5......
  • 0x02 Leetcode Hot100 哈希
    前置知识掌握每种语言的基本数据类型及其时间复杂度。Python:list、tuple、set、dictC++:STL中的vector、set、mapJava:集合类中的List、Set、Map为什么是哈希?在不同语言中,对于字典(dict)类的数据都会先将其键(key)进行哈希(Hash)运算,这个Hash值决定了键值对在内存中的存储位置,因此......
  • Leetcode73. 矩阵置零
    问题描述:给定一个 mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。示例1:输入:matrix=[[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例2:输入:matrix=[[0,1,2,0],[3,4,5,2],[1,3,1,5]]输出:[[0,0,0,0],[0,......