解题思路:
因为这个矩阵是有序的,所以从右上角开始查找。这样的话,如果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; }