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

leetcode位运算(3211. 生成不含相邻零的二进制字符串)

时间:2024-07-20 14:56:20浏览次数:21  
标签:3211 示例 二进制 Main3 mask 111 字符串 leetcode

前言

经过前期的基础训练以及部分实战练习,粗略掌握了各种题型的解题思路。接下来重点专项练习,加强重难点知识的练习。

描述

给你一个正整数 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

实现原理与步骤

本题使用了移位、异或、或、与的二进制bit位的大部分操作。对二进制bit位不熟悉的可以多加练习

1.构建n位的全1的掩码mask。

2.遍历n位的二进制数,将i与mask异或将0转换成1后为x。

3.x>>1&x判断是存在连续的1.

4.通过1<<n|i,将n为的二进制最高位前加1.再通过substring输出。

代码实现

import java.util.*;
public class Main3 {

    public static void main(String[] args) {
        Main3 main3=new Main3();
        List<String> res=main3.validStrings(3);
        System.out.println(res.toString());
    }
    public List<String> validStrings(int n) {
        List<String> ans = new ArrayList<>();
        //构建位数为n的掩码,示例1中n为3,则mask为111
        int mask = (1 << n) - 1;
        for (int i = 0; i < (1 << n); i++) {
            //i与比特位都是1的mask异或,则标记0的位置位1.
            int x = mask ^ i;
            //x左移1位后与自身与为0,则x不存在练习的1.
            if (((x >> 1) & x) == 0) {
                 //此处Integer.toBinaryString由于会自动移除前面的0,则最第一位补1再通过substring移除
                ans.add(Integer.toBinaryString((1 << n) | i).substring(1));
            }
        }
        return ans;
    }
}

标签:3211,示例,二进制,Main3,mask,111,字符串,leetcode
From: https://blog.csdn.net/acuteeagle01/article/details/140570552

相关文章

  • LeetCode 1788. 最大化花园的美观度
    1788.最大化花园的美观度有一个花园,有 n 朵花,这些花都有一个用整数表示的美观度。这些花被种在一条线上。给定一个长度为 n 的整数类型数组 flowers ,每一个 flowers[i] 表示第 i 朵花的美观度。一个花园满足下列条件时,该花园是有效的。花园中至少包含两朵花。第......
  • LeetCode题练习与总结:比较版本号--165
    一、题目描述给你两个 版本号字符串 version1 和 version2 ,请你比较它们。版本号由被点 '.' 分开的修订号组成。修订号的值 是它 转换为整数 并忽略前导零。比较版本号时,请按 从左到右的顺序 依次比较它们的修订号。如果其中一个版本字符串的修订号较少,则将缺失......
  • 算法第十一天:leetcode707.设计链表
    一、设计链表的题目描述与链接  707.设计链表的链接如下表所示,您可直接复制下面网址进入力扣学习,在观看下面的内容之前一定要先做一遍哦,这样才能印象深刻!https://leetcode.cn/problems/design-linked-list/https://leetcode.cn/problems/design-linked-list/题目描述:你......
  • (nice!!!)LeetCode 3085. 成为 K 特殊字符串需要删除的最少字符数(贪心、哈希表、字符串)
    3085.成为K特殊字符串需要删除的最少字符数思路:1、用哈希表mp先统计出字符串word中所有字母出现的次数2、将哈希表里的次数进行升序排序v3、采用贪心的策略,删除最少的字符串,就是保留最大的字符串。可知,最少有一个元素的数量不需要改变。那么我们就枚举这个数量v[i],......
  • 【代码随想录训练营第42期 Day3打卡 LeetCode 203.移除链表元素,707.设计链表,206.反转
    一、做题感受今天是打卡的第三天,前两天题目主要考察数组相关知识,现在已经来到了链表的学习。题目共有三道,都是以考察单链表为主,整体来说难度不大,但是思路很灵活,尤其是反转链表的考察,双指针的新用法。今天做题总体感觉不错,能有自己的思考和理解。二、链表相关知识1.常见链表......
  • Leetcode—210. 课程表 II【中等】
    2024每日刷题(145)Leetcode—210.课程表IIdfs实现代码enumclassState{init,visiting,visited};classSolution{public:vector<int>findOrder(intnumCourses,vector<vector<int>>&prerequisites){vector<vector<int&g......
  • Leetcode—207. 课程表【中等】
    2024每日刷题(145)Leetcode—207.课程表图实现代码enumclassState{init,visiting,visited};classSolution{public:boolcanFinish(intnumCourses,vector<vector<int>>&prerequisites){vector<vector<int>>graph(numCo......
  • LeetCode 363. 矩形区域不超过 K 的最大数值和
    363.矩形区域不超过K的最大数值和给你一个 mxn 的矩阵 matrix 和一个整数 k ,找出并返回矩阵内部矩形区域的不超过 k 的最大数值和。题目数据保证总会存在一个数值和不超过 k 的矩形区域。示例1:输入:matrix=[[1,0,1],[0,-2,3]],k=2输出:2解释:蓝色边......
  • [LeetCode] 1380. Lucky Numbers in a Matrix
    Givenanmxnmatrixofdistinctnumbers,returnallluckynumbersinthematrixinanyorder.Aluckynumberisanelementofthematrixsuchthatitistheminimumelementinitsrowandmaximuminitscolumn.Example1:Input:matrix=[[3,7,8],[9,11,......
  • 算法篇 滑动窗口 leetCode 水果成篮
    水果成蓝1.题目描述2.图形分析2.1原理解释2.2怎么想出使用滑动窗口2.3图形分析3.代码演示1.题目描述2.图形分析2.1原理解释2.2怎么想出使用滑动窗口2.3图形分析3.代码演示......