• leetcode-3-basic-divide and conquer


    解题思路:

    因为这个矩阵是有序的,所以从右上角开始查找。这样的话,如果target比matrix[row][col]小,那么就向左查找;如果比它大,就

    向下查找。如果相等就找到了,如果碰到边界,就说明没有。需要注意的是,1)矩阵按行存储;2)测试用例中有空的情况[],

    所以在进行查找之前,必须进行判断,否则为col赋初值时会报错。

    bool searchMatrix(vector<vector<int>>& matrix, int target) {
            if (matrix.size() == 0 || matrix[0].size() == 0)
                return false;
            int row = 0;
            int col = matrix[0].size() - 1;
            while (row < matrix.size() && col > -1) {
                if (target == matrix[row][col])
                    return true;
                else if (target > matrix[row][col])
                         row ++;
                else
                         col --;
            }
            return false;
        }
    

    解题思路:

    这道题分明要我用分治法。。。考虑将字符串以运算符为界,分成左右两个子串,根据运算符计算加,减,乘,将结果防到result中。

    在最底层,需要将数字放入。注意:1)substr(start, length),length不指定时是到结尾;2) atoi的输入是char*,所以需要用c_str将

    string转为字符数组。

    vector<int> diffWaysToCompute(string input) {
            vector<int> result;
            int i;
            for (i = 0 ; i < input.length(); i++) {
                if (input[i] == '+' || input[i] == '-' || input[i] == '*') {
                    vector<int> left = diffWaysToCompute(input.substr(0, i));
                    vector<int> right = diffWaysToCompute(input.substr(i + 1));
                    int j,k;
                    for (j = 0; j < left.size(); j++) {
                        for (k = 0; k < right.size(); k++) {
                            if (input[i] == '+') {
                                result.insert(result.end(), left[j] + right[k]);
                            } else if (input[i] == '-') {
                                result.insert(result.end(), left[j] - right[k]);
                            } else {
                                result.insert(result.end(), left[j] * right[k]);
                            }
                        }
                    }
                }
            }
            if (result.empty() == true)
                result.insert(result.end(), atoi(input.c_str()));
            return result;
        }
    

      

  • 相关阅读:
    LeetCode 209. 长度最小的子数组(Minimum Size Subarray Sum)
    LeetCode 快乐数(Happy Number)
    Deep & Cross Network总结
    CTR预估之LR与GBDT融合
    近似最近邻算法-annoy解析
    FM与FFM深入解析
    LeetCode 222. 完全二叉树的节点个数(Count Complete Tree Nodes)
    js 时间与时间戳的转换
    table 样式美化
    c# string 和 byte[]数组之间转换
  • 原文地址:https://www.cnblogs.com/pxy7896/p/6497060.html
Copyright © 2020-2023  润新知