Non-negative Integers without Consecutive Ones (Leetcode 600)

参考如下link:
https://discuss.leetcode.com/topic/90571/java-solution-dp

这样的题原来是可以拿dp做的,从len = 1 dp推广到 len = n. 需要注意的是这道题是要小于某个数,而不是小于某个长度,所以如果原数有'00',比如4,最终结果需要去掉101这个情况,而这种情况恰好是b[i-1];

class Solution {
public:
    
    string toBinaryString(int num){
        string ret;
        int mask = 1;
        while(num >= mask){
            if((num & mask) >= 1) ret = '1' + ret;
            else ret = '0' + ret;
            mask <<= 1;
        }
        return ret;
    }

    int findIntegers(int num) {
        if(num <= 0) return 0;
        string s = toBinaryString(num);
        //cout << s << endl;
        int len = s.length();
        int a[len], b[len];
        a[0] = b[0] = 1;
        for(int i=1; i<len; i++){
            a[i] = a[i-1] + b[i-1];
            b[i] = a[i-1];
        }
        int res = a[len-1] + b[len-1];
        reverse(s.begin(), s.end());
        for(int i=len-2; i>=0; i--){
            if(s[i] == '1' && s[i+1] == '1') break;
            else if(s[i] == '0' && s[i+1] == '0') res -= b[i];
        }
        return res;
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,353评论 0 18
  • LeetCode 刷题随手记 - 第一部分 前 256 题(非会员),仅算法题,的吐槽 https://leetc...
    蕾娜漢默阅读 17,962评论 2 36
  • 8. String to Integer (atoi) ls = list(str.strip()) 先去除字符串...
    Morphiaaa阅读 368评论 0 0
  • (欢迎转载,但请注明出处并附带链接)算法好久没复习了,今天看见一妹子在办公室刷Leetcode,顿时我也来了兴趣,...
    Nick_Zuo阅读 700评论 0 3