牛客地址:神奇的数字
思路:
采用双指针的方法,设置头指针left和尾指针right,然后先用left往后遍历找到偶数,right往前遍历找到偶数,
然后交换left,right所指向的值,同时需要将left++,right--
时间复杂度: O(n)
额外空间复杂度: O(1)
代码:
public String change (String number) {
//字符串转char数组
char[] c = number.toCharArray();
//定义左右指针
int left=0,right=number.length()-1;
while (left < right){
//从左往右找偶数
while (left < right && c[left]%2 != 0){
left++;
}
//从右往左找偶数
while (left < right && c[right]%2 != 0){
right--;
}
//交换
char temp = c[left];
c[left] = c[right];
c[right] = temp;
//更新指针
left++;
right--;
}
return String.valueOf(c);
}