comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
简单 |
1365 |
第 288 场周赛 Q1 |
|
给你一个正整数 num
。你可以交换 num
中 奇偶性 相同的任意两位数字(即,都是奇数或者偶数)。
返回交换 任意 次之后 num
的 最大 可能值。
示例 1:
输入:num = 1234 输出:3412 解释:交换数字 3 和数字 1 ,结果得到 3214 。 交换数字 2 和数字 4 ,结果得到 3412 。 注意,可能存在其他交换序列,但是可以证明 3412 是最大可能值。 注意,不能交换数字 4 和数字 1 ,因为它们奇偶性不同。
示例 2:
输入:num = 65875 输出:87655 解释:交换数字 8 和数字 6 ,结果得到 85675 。 交换数字 5 和数字 7 ,结果得到 87655 。 注意,可能存在其他交换序列,但是可以证明 87655 是最大可能值。
提示:
1 <= num <= 109
我们可以用一个长度为
接下来,我们依次遍历整数
时间复杂度
class Solution:
def largestInteger(self, num: int) -> int:
nums = [int(c) for c in str(num)]
cnt = Counter(nums)
idx = [8, 9]
ans = 0
for x in nums:
while cnt[idx[x & 1]] == 0:
idx[x & 1] -= 2
ans = ans * 10 + idx[x & 1]
cnt[idx[x & 1]] -= 1
return ans
class Solution {
public int largestInteger(int num) {
char[] s = String.valueOf(num).toCharArray();
int[] cnt = new int[10];
for (char c : s) {
++cnt[c - '0'];
}
int[] idx = {8, 9};
int ans = 0;
for (char c : s) {
int x = c - '0';
while (cnt[idx[x & 1]] == 0) {
idx[x & 1] -= 2;
}
ans = ans * 10 + idx[x & 1];
cnt[idx[x & 1]]--;
}
return ans;
}
}
class Solution {
public:
int largestInteger(int num) {
string s = to_string(num);
int cnt[10] = {0};
for (char c : s) {
cnt[c - '0']++;
}
int idx[2] = {8, 9};
int ans = 0;
for (char c : s) {
int x = c - '0';
while (cnt[idx[x & 1]] == 0) {
idx[x & 1] -= 2;
}
ans = ans * 10 + idx[x & 1];
cnt[idx[x & 1]]--;
}
return ans;
}
};
func largestInteger(num int) int {
s := []byte(fmt.Sprint(num))
cnt := [10]int{}
for _, c := range s {
cnt[c-'0']++
}
idx := [2]int{8, 9}
ans := 0
for _, c := range s {
x := int(c - '0')
for cnt[idx[x&1]] == 0 {
idx[x&1] -= 2
}
ans = ans*10 + idx[x&1]
cnt[idx[x&1]]--
}
return ans
}
function largestInteger(num: number): number {
const s = num.toString().split('');
const cnt = Array(10).fill(0);
for (const c of s) {
cnt[+c]++;
}
const idx = [8, 9];
let ans = 0;
for (const c of s) {
const x = +c;
while (cnt[idx[x % 2]] === 0) {
idx[x % 2] -= 2;
}
ans = ans * 10 + idx[x % 2];
cnt[idx[x % 2]]--;
}
return ans;
}