Day1,反转字符串求解方法
- 方法一:递归方法
- 方法二:不使用递归的java代码
- 方法三:基础的C语言代码实现
方法一:递归方法
算法思想:
我们实现递归函数helper,它接受两个参数:left左指针和right右指针。
- 如果left>=right,不做任何操作。
- 否则交换s[left]和s[right]和调用helper(left + 1, right - 1)。
首次调用函数我们传递首尾指针反转整个字符串return helper(0, len(s) - 1)。
主要代码如下(不是源代码):
class Solution{
public void helper(char[] s, int left, int right){
if(left >= right) return;
char tmp = s[left];
s[left++] = s[right];
s[right--] = tmp;
helper(s, left, right);
}
public void reverseString(char[] s){
helper(s, 0, s.lenghth - 1);
}
}
复杂度分析
- 时间复杂度:O(N)。执行了N/2次交换。
- 空间复杂度:O(N)。递归过程中使用的堆栈空间。
方法二:不使用递归的java代码
这里先给代码
class Solution{
public void reverseString(char[] s){
if(s.length==0) return;
int index = s.length - 1;
int start = 0;
while(true){
//交换
char tmp = s[start];
s[start] = s[index];
s[index] = tmp;
index--;
start++;
if(index<start) break;
}
}
}
方法三:基础的C语言代码实现
暂时只给主要代码
void reverseString(char* s, int sSize){
int i, j;
char tmp;
for(i=0, j=sSize-1; i<=sSize/2; i++, j--)
{
tmp = s[i];
s[i] = s[j];
s[j] = tmp;
}
}
运行结果:
但是,这里有一个问题,当下面这种情况时,输出结果错误,请大佬指点