首页 > 其他分享 >401. 二进制手表

401. 二进制手表

时间:2023-06-30 11:12:54浏览次数:42  
标签:index str 10 二进制 res 手表 int turnedOn 401

这里可以通过遍历的方式做出来。

i从0~1111111111进行遍历,如果1的个数等于要求的个数tournedOn,此时进一步判断时钟位和分钟为是否符合要求,满足要求则放入结果容器中。

class Solution {
public:
    vector<string> readBinaryWatch(int turnedOn) {
        vector<string> res;
        char str[10];
        for(int i = 0; i < 1 << 10; i ++ ) {
            int s = 0; // 存储1的个数
            for(int j = 0; j < 10; j ++ ) {
                if(i >> j & 1) s ++;
            }
            if(s == turnedOn ) {
          // a是时钟位,b是分钟位 int a = i >> 6, b = i & 63;
          // 判断a和b是否符合要求 if(a < 12 && b < 60) { sprintf(str, "%d:%02d", a, b); res.push_back(str); } } } return res; } };

虽然本题是简单题,但同样可以用回溯+剪枝来做

index迭代一定要+1,否则无法跳出

class Solution {
public:
  // 这里定义的全局变量,但是同样可以通过局部变量+引用来传参 vector<string> res;
  // hours和minutes字符数组的值一定要是错开的!!!只有先确定hours才能去确定minutes char hours[10] = {1, 2, 4, 8, 0, 0, 0, 0, 0, 0}; char minutes[10] = {0, 0, 0, 0, 1, 2, 4, 8, 16, 32}; vector<string> readBinaryWatch(int turnedOn) { readOnce(turnedOn, 0, 0, 0); return res; } void readOnce(int turnedOn, int index, int hour, int minute) {
      // 跳出迭代的条件
     if(hour > 11 | minute > 59) return;
      // 如果是0, 则只有0:00 if(turnedOn == 0) { char str[10]; sprintf(str, "%d:%02d", hour, minute); res.push_back(str); return; }
    // index就是需要遍历的字符数组的下标,从1开始到字符数组的size结束
    // 注意,每次回溯,index需要+1,否则会陷入死循环 for(int i = index; i < 10; i ++ ) { readOnce(turnedOn - 1, i + 1, hour + hours[i], minute + minutes[i]); } } };

注意:由于计算和输入无关,因此时间复杂度O(1),唯一可以优化的是空间。

回溯+剪枝的空间虽然不理想,但是有助于理解回溯的思想。

标签:index,str,10,二进制,res,手表,int,turnedOn,401
From: https://www.cnblogs.com/luxiayuai/p/17516094.html

相关文章

  • 2023.6.29 重构 2 行二进制矩阵
    考虑贪心策略。每一列,把1优先放在lower和upper两行中较大的那一行上。implSolution{pubfnreconstruct_matrix(upper:i32,lower:i32,colsum:Vec<i32>)->Vec<Vec<i32>>{letn=colsum.len();let(mutupper,mutlower)=(upper,l......
  • 力扣---1253. 重构 2 行二进制矩阵
    给你一个 2 行 n 列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是 0 就是 1。第 0 行的元素之和为 upper。第 1 行的元素之和为 lower。第 i 列(从 0 开始编号)的元素之和为 colsum[i],colsum 是一个长度为 n 的整数数组。你需要利用 ......
  • 如何配置mysql主从复制中的二进制日志传输?
    要配置MySQL主从复制中的二进制日志传输,需要进行以下步骤:确保主服务器的二进制日志功能已启用:在主服务器的配置文件(通常是my.cnf或my.ini)中,找到并确认以下配置项已启用:log_bin=ONbinlog_format=ROWlog_bin表示启用二进制日志功能,binlog_format设置......
  • 浮点数-Float-Double转二进制在线工具
    浮点数-Float-Double转二进制Float转二进制,Double转浮点数-Float-Double转二进制https://tooltt.com/floatconverter/在线单双精度(Float,Double)浮点数转二进制浮点数,是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一......
  • C++学习---qt的公有类、私有类、Q_Q、Q_D、二进制兼容
    1、二进制兼容如果程序从一个以前版本的库动态链接到新版本的库之后,能够继续正常运行,而不需要重新编译,那么我们就说这个库是二进制兼容的。如果不能保证库的二进制兼容性,就意味着每次发布库的新版本时,依赖该库的所有程序都必须重新编译才能正常运行。2、公有类、私有类是解决......
  • 1、Elasticsearch单机与集群的安装(包安装、二进制安装与Docker安装)
    ElasticsearchElasticsearch是一个实时的全文搜索,存储库和分析引擎https://www.elastic.co/cn/what-is/elasticsearchElasticsearch在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,可用于多种场景:应用程序搜索网站搜索企业搜索日志处理和分析基础设施指标和......
  • P9401
    之前的theme在我的老电脑上太卡了,就先不用了。换上了高贵的PinkRabbitCSS!gcd这个东西没啥最优化的好性质,就是一个log结构有点用。这题也用不到。先考虑枚举。注意到\(b_i,a_i\)不寻常的范围,如果选了一个\(a_i\),那么答案\(\le5\times10^5\)。特判全为\(b_i\)。......
  • 后台报401,怎么处理
    1、401状态码的含义axios向服务器端发送请求时,服务器端有些api接口要求传递token,token失效或没有传递,就会报401错误服务端要求传递token信息,而实际发送请求时没有传递。发送请求时有传递token到达服务器端,但由于时间比较久,这个token在服务器中已经过期了(服务器存储token有效......
  • Linux MySQL 5.7二进制 小版本升级
    LinuxMySQL5.7二进制小版本升级LinuxMySQL5.7二进制小版本升级MySQL5.7二进制安装在Unix/Linux上升级时,分为就地和逻辑升级方法。1就地升级就地升级包括关闭旧的MySQL服务器,用新的MySQL服务器替换旧的MySQL二进制文件或软件包,在现有数据目录上重新启动MySQL,以及运行mys......
  • mysql的二进制日志和中继日志文件的分析、恢复、清理
    1.mysql的二进制日志目录1.mysql的二进制日志1.1.概述1.2.MySQL中二进制日志(binlog)3种不同的格式(Mixed,Statement,Row)1.2.1.Row1.2.2.Statement1.2.3.Mixed1.3.binglog格式设置1.4.二进制日志文件的清理1.4.1.自动清理binglog1.4.1.修改过期时间1.4.2.手动清除......