首页 > 其他分享 >2022-02-21:不含连续1的非负整数。 给定一个正整数 n ,返回范围在 [0, n] 都非负整数中,其二进制表示不包含 连续的 1 的个数。 输入: n = 5 输出: 5 解释: 下面是带

2022-02-21:不含连续1的非负整数。 给定一个正整数 n ,返回范围在 [0, n] 都非负整数中,其二进制表示不包含 连续的 1 的个数。 输入: n = 5 输出: 5 解释: 下面是带

时间:2023-05-12 10:32:09浏览次数:46  
标签:02 return 21 非负 int 整数


2022-02-21:不含连续1的非负整数。
给定一个正整数 n ,返回范围在 [0, n] 都非负整数中,其二进制表示不包含 连续的 1 的个数。
输入: n = 5
输出: 5
解释:
下面是带有相应二进制表示的非负整数<= 5:
0 : 0
1 : 1
2 : 10
3 : 11
4 : 100
5 : 101
其中,只有整数3违反规则(有两个连续的1),其他5个满足规则。
1 <= n <= 10的9次方。
力扣600。

答案2022-02-21:

动态规划。
根据规律,跟斐波那契数列有关,但未找到这种解法。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
    n := 15
    ret := findIntegers(n)
    fmt.Println(ret)
}

func findIntegers(n int) int {
    i := 31
    for ; i >= 0; i-- {
        if (n & (1 << i)) != 0 {
            break
        }
    }
    // for循环出来之后,i表示,n最高位的1,在哪?
    // 从这个位置,往右边低位上走!
    dp := make([][][]int, 2)
    for ii := 0; ii < 2; ii++ {
        dp[ii] = make([][]int, 2)
        for j := 0; j < 2; j++ {
            dp[ii][j] = make([]int, i+2)
        }
    }
    return f(0, 0, i, n, dp)
}

func f(pre, alreadyLess, index, num int, dp [][][]int) int {
    if index == -1 {
        return 1
    }
    if dp[pre][alreadyLess][index] != 0 {
        return dp[pre][alreadyLess][index]
    }
    ans := 0
    if pre == 1 {
        ans = f(0, getMax(alreadyLess, twoSelectOne((num&(1<<index)) != 0, 1, 0)), index-1, num, dp)
    } else {
        if (num&(1<<index)) == 0 && alreadyLess == 0 {
            ans = f(0, alreadyLess, index-1, num, dp)
        } else {
            ans = f(1, alreadyLess, index-1, num, dp) + f(0, getMax(alreadyLess, twoSelectOne((num&(1<<index)) != 0, 1, 0)), index-1, num, dp)
        }
    }
    dp[pre][alreadyLess][index] = ans
    return ans
}

func getMax(a, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

func twoSelectOne(c bool, a, b int) int {
    if c {
        return a
    } else {
        return b
    }
}

执行结果如下:

2022-02-21:不含连续1的非负整数。 给定一个正整数 n ,返回范围在 [0, n] 都非负整数中,其二进制表示不包含 连续的 1 的个数。 输入: n = 5 输出: 5 解释: 下面是带_for循环


左神java代码


标签:02,return,21,非负,int,整数
From: https://blog.51cto.com/u_14891145/6269419

相关文章

  • 2020-11-09:谈谈布隆过滤器和布谷鸟过滤器的相同点和不同点?
    福哥答案2020-11-09:相同点:都是过滤器。不同点:算法:布隆过滤器多个hash函数。布谷鸟过滤器用布谷鸟哈希算法。能否删除:布隆过滤器无法删除元素。布谷鸟过滤器可以删除元素,有误删可能。空间是否2的指数:布隆过滤器不需要2的指数。布谷鸟过滤器必须是2的指数。空间利用率:相同误判下......
  • 2020-05-21:es底层读写原理?倒排索引原理?
    es不熟悉,答案仅供参考:es写数据过程1、客户端选择一个node发送请求过去,这个node就是coordinatingnode(协调节点)2、coordinatingnode对document进行路由,将请求转发给对应的node(有primaryshard)3、实际的node上的primaryshard处理请求,然后将数据同步到replicanode。4、coord......
  • Google I/O 2023发布大语言模型PaLM2
    ·PaLM2模型提供了不同规模的四个版本,其中轻量级的Gecko模型可以在移动设备上运行,速度非常快,不联网也能在设备上运行。谷歌还推出了两个专业领域大模型,其中,Med-PaLM2能回答各种医学问题,是首个在美国医疗执照考试中达到专家水平的大语言模型。 谷歌首席执行官桑达尔·皮查伊......
  • 2023五一杯B题问题四----基于二分最大流最优解
    4.1问题四的分析:本题要求建立一个最小成本的运输策略,考虑最大网络流问题(MaximumFlowProblem),对于一个带权有向图G(V,E),其中V为图中所有点的集合,E为所有边的集合,且每一条边都有它的流量上限.这个带权有向图中有两个特殊的点:源(source)节点s和汇(sink)节点t,且这两个点......
  • SSO2.0 3-20230511
         ......
  • day70(2023.5.11)
    1.计算机网络通信 2.TCP/IP协议群 3.TCP协议传输特点 4.服务端口 5.数据包与处理流程 6.HTTP协议简介 7.HTTP协议特点 8.HTTP协议发展和版本     9.HTTP协议中URI、URL、URN10.HTTP协议的......
  • Scala入门到放弃—02—函数
    函数方法定义def方法名(参数:参数类型):返回值类型={ //方法体 //最后一行作为返回值(不需要使用return)}defmax(x:Int,y:Int):Int={ if(x>y) x else y}packageorg.exampleobjectApp{defmain(args:Array[String]):Unit={println(a......
  • C/C++折半查找与哈希查找[2023-05-11]
    C/C++折半查找与哈希查找[2023-05-11]4、折半查找与哈希查找(难度等级A)[问题描述]查找是通过在查找表中做比较来完成的操作。折半查找与哈希查找都是利用数组实现的查找算法。通过本题,可以观察两种查找算法的性能。一般我们用平均查找长度ASL来表示一种查找算法的性能。ASL......
  • SemiEng20230413-What Designers Need To Know About GAA
    Nanowire与nanosheet争议仍然存在,业界还没确定谁更适合作下一代主流逻辑器件。对任何新器件,第一代都是用来学习试验的,后面再迭代升级。FinFET不能继续缩微的原因:fin之间要填栅和功函数堆叠层,fin之间15-20nm的距离是必要的。“So,youhavethiscliff.”工艺(Foundry)......
  • 2023.5.11
    1//例6-162#include<iostream>3usingnamespacestd;4classPoint5{6public:7Point():x(0),y(0)8{9cout<<"DefaultConstructorcalled."<<endl;10}11Point(intx,inty):x(x),y......