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;
    }

  

 

posted @ 2017-03-03 15:51  陆离可  阅读(162)  评论(0编辑  收藏  举报