剑指offer思路:用char数组存储字符串,确保数组足够大的情况下从后往前更改数组值;题目用string字符串变量,所以解题稍有更改;
当然还有更方便的封装函数。
class Solution {
public:
string replaceSpace(string s) {
string x = "";
if ( s.empty())
return "";
else
{
int length = s.size();
string blanks = " "; //2个空格
int numOfBlank = 0;
int lengthTemp = length-1;
while (lengthTemp>=0 )
{
if (s[lengthTemp--] == ' ')
{
numOfBlank++;
s += blanks;
}
} //原字符串增加多少个空格
int lengthOfNew = length+2*numOfBlank;
lengthTemp = length-1;
int lengthOfNewTemp = lengthOfNew-1;
while(lengthTemp>=0 && lengthTemp<lengthOfNewTemp)
{
if (s[lengthTemp] != ' ')
{
s[lengthOfNewTemp--] = s[lengthTemp--];
}
else{
s[lengthOfNewTemp--] = '0';
s[lengthOfNewTemp--] = '2';
s[lengthOfNewTemp--] = '%';
lengthTemp--;
}
}
//直接调用封装函数
// while(s.find(' ')!= s.npos)
// {
// string temp = "%20";
// s.replace(s.find(' '),1,temp);
// }
}
return s;
}
};
思路重点:从尾开始思考。
class Solution {
public:
int jumpFloor(int number) {
//递归
// if ( number == 0 ) return 0;
// if ( number == 1 ) return 1;
// if ( number == 2 ) return 2;
// return jumpFloor(number-1) + jumpFloor(number-2);
// int ways =0 ;
// if ( number == 0 )
// return ways;
// else{
// queue<int> q;
// q.push(number);
// while (!q.empty())
// {
// int node = q.front();
// q.pop();
// int left = node-1;
// int right = node-2;
// if (left ==0)
// ways++;
// else if (left>0)
// q.push(left);
// if (right == 0)
// ways++;
// else if (right>0)
// q.push(right);
// }
// }
// return ways;
if ( number == 0 )
return 0;
int a=1,b=1;
for (int i=1;i<=number-1;i++)
{
a = a + b;
b = a - b;
}
return a;
}
};