剑指offer
2018-03-02 本文已影响0人
我是谁的小超人
- 第一题:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
class Solution {
public:
bool Find(int target, vector<vector<int> > array) {
if(array.size()!=0)
{
int row = 0;
int col = array[0].size() - 1;
while(row<array.size() && col>= 0)
{
if(array[row][col]==target)
return true;
else if(array[row][col]>target)
--col;
else
++row;
}
}
return false;
}
};
- 第二题:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
class Solution {
public:
void replaceSpace(char *str,int length) {
if(str == NULL || length <= 0)
return;
int originalLength = 0;
int numOfBlank = 0;
for(int i = 0;str[i] != '\0';++i)
{
++originalLength;
if(str[i]==' ')
++numOfBlank;
}
int newLength = originalLength + 2*numOfBlank;
if(newLength > length)
return;
int indexOfOriginal = originalLength;
int indexOfNew = newLength;
while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
{
if(str[indexOfOriginal] == ' ')
{
str[indexOfNew --] = '0';
str[indexOfNew --] = '2';
str[indexOfNew --] = '%';
}
else
{
str[indexOfNew --] = str[indexOfOriginal];
}
-- indexOfOriginal;
}
}
};
//i++是后缀运算,就是先取出i的值,i再+1;++i是前缀运算,就是i先+1,再取i的值。