9/12力扣刷题笔记-动态规划, 二进制求和, 图

 动态规划法,时间和空间复杂度均为O(n)

此方法超出时间限制。

 用滚动数组思想,把空间复杂度优化成O(1)

 70. 爬楼梯 - 力扣(LeetCode)

官方题解的方法2,3没看。

 67. 二进制求和 - 力扣(LeetCode)

class Solution {
public:
    string addBinary(string a, string b) {
        int len_a = a.length();
        int len_b = b.length();
        string ans;
        int help = 0;
        int i, j, k;
        for(i = len_a - 1, j = len_b - 1; i >= 0 && j >= 0; i--, j--){
            k = (a[i] -'0') + (b[j] - '0') + help;
            if(k == 3){
                ans += '1';
                help = 1;
            }else if(k == 2){
                ans += '0';
                help = 1;
            }else if(k == 1){
                ans += '1';
                help = 0;
            }else{//0
                ans += '0';
                help = 0; 
            }
        }
        while(i >= 0 || j >= 0){
            if(i >= 0){
                k = (a[i] - '0') + help;
            }
            else{
                k = (b[j] - '0') + help;
            }
            if(k == 2){
                ans += '0';
                help = 1;
            }else if(k == 1){
                ans += '1';
                help = 0;
            }else{
                if(i >= 0){
                    ans += a[i];
                }else if(j >= 0){
                    ans += b[j];
                }
            }
            i--, j--;
        }
        if(help == 1){
            ans += '1';
        }
        string ture_ans;
        for(int i = ans.length()-1; i >= 0; i--){
            ture_ans += ans[i];
        }
        return ture_ans;

    }
};

这题要注意的是:(int)ans[i] = (int)('1')的结果是49,字符1的ASCII码值。要想取这个字符1转换为数字1,应该写成('1' - '0').

如下为官方解答,很有水平。

 

 997. 找到小镇的法官 - 力扣(LeetCode)

 

 

 

posted @ 2024-09-12 13:30  axuu  阅读(4)  评论(0编辑  收藏  举报