题解 | #神奇的数字#
神奇的数字
https://www.nowcoder.com/practice/01e7bedf5dd2421aa6f879fd8055e51d
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param number string字符串 * @return string字符串 */ public String change(String number) { char[] chars = number.toCharArray(); int left = 0; int right = chars.length - 1; while (left < right) { while (chars[left] % 2 == 1) { left++; } while (chars[right] % 2 == 1) { right--; } if (left < right) { //这里的left<right不能少,要确保当前跳过了奇数后的两个指针仍满足大小关系 char temp = chars[left]; chars[left] = chars[right]; chars[right] = temp; left++; right--; } } return new String(chars); } }
采用双指针的思想,left指针指向字符串首,right指针指向字符串尾
当遇到奇数时跳过,
当找到两个偶数的时候就进行str[1]、str[r]的交换
交换后让指针left++,right-- 然后重复上述操作,
直到left right相遇时返回最终结果