- 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
具体思路:1.遍历字符串,看之后的总长度,2.从后往前遍历字符串,进行替代
class Solution {
public:
void replaceSpace(char *str,int length) {
if(length<=0)
return;
int sum=0;
for(int i=0;i<length;i++)
{
if(str[i]==' ')
sum++;
}
int new_length=length+sum*2;
int num=length-1;
for(int i=(new_length-1);i>=0,num>=0;i--,num--)
{
if(str[num]!=' ')
str[i]=str[num];
else{
str[i]='0';
i--;
str[i]='2';
i--;
str[i]='%';
}
}
}
};
2.把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。
NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。
思路:就相当于把一个排序好的数组,将后面选几个整体挪动到前面,如1,2,3,4,5,6变成了4,5,6,1,2,3,很容易就找到规律,当左边>右边,右边就是最小的数。
class Solution {
public:
int minNumberInRotateArray(vector<int> rotateArray) {
if(rotateArray.size() == 0)
return 0;
for(int i = 0 ; i < rotateArray.size() -1 ;i++)
{
if(rotateArray[i] > rotateArray[i + 1])
return rotateArray[i + 1];
}
}
};
3.输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
思路:最简单的倒序输出链表数据方式就是顺序遍历,如何记录所有数据,然后倒着输出出来,但是链表长度未知,因此用Vector存储较好,顺序遍历,将每个数据存入到vector的第一个元素即可。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* ListNode(int x) :
* val(x), next(NULL) {
* }
* };
*/
class Solution {
public:
vector<int> printListFromTailToHead(ListNode* head) {
vector<int> result;
while(head)
{
result.insert(result.begin(),head->val);
head = head->next;
}
return result;
}
};