[面试备忘]不使用中间变量逆置字符串
题目:不使用中间变量,逆置字符串。
#include <iostream> #include <cstring> void reverse_without_temp(char* array) { char* first = array; char* last = array + strlen(array) - 1; while (first < last) { *first ^= *last; *last ^= *first; *first ^= *last; ++first; --last; } } void reverse_without_temp(char* array, char* tag) { if (strlen(array) == 1) { return; } array += strlen(array) - 1; while (array != tag) { *array ^= *(array -1); *(array - 1) ^= *array; *array ^= *(array -1); --array; } reverse_without_temp(array + 1, array + 1); } int main() { char array[] = "ABCDE"; std::cout << "Before: " << array << std::endl; reverse_without_temp(array, array); std::cout << " After: " << array << std::endl; return 0; }
方法一使用了first和last两个变量,不能算绝对意义上的没有使用中间变量。
方法二使用递归参数传递的方式规避了一个不可回避的循环边界的变量,算是取巧
Any more?