670. Maximum Swap
Il testo del problema è tradotto dal russo per la lingua selezionata. Il codice resta invariato.
given intero num. Вы можете поменять местами две цифры не более одного раза, чтобы получить number с наибольшим значением.
return number с наибольшим значением, которое можно получить.
Esempio:
Input: num = 2736
Output: 7236
Explanation: Swap the number 2 and the number 7.
C# soluzione
abbinato/originalepublic class Solution {
public int MaximumSwap(int num) {
char[] A = num.ToString().ToCharArray();
char[] ans = (char[])A.Clone();
for (int i = 0; i < A.Length; i++) {
for (int j = i + 1; j < A.Length; j++) {
char tmp = A[i];
A[i] = A[j];
A[j] = tmp;
for (int k = 0; k < A.Length; k++) {
if (A[k] != ans[k]) {
if (A[k] > ans[k]) {
ans = (char[])A.Clone();
}
break;
}
}
A[j] = A[i];
A[i] = tmp;
}
}
return int.Parse(new string(ans));
}
}
C++ soluzione
bozza automatica, rivedere prima dell'invio#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
public int MaximumSwap(int num) {
char[] A = num.ToString().ToCharArray();
char[] ans = (char[])A.Clone();
for (int i = 0; i < A.size(); i++) {
for (int j = i + 1; j < A.size(); j++) {
char tmp = A[i];
A[i] = A[j];
A[j] = tmp;
for (int k = 0; k < A.size(); k++) {
if (A[k] != ans[k]) {
if (A[k] > ans[k]) {
ans = (char[])A.Clone();
}
break;
}
}
A[j] = A[i];
A[i] = tmp;
}
}
return int.Parse(new string(ans));
}
}
Java soluzione
abbinato/originaleclass Solution {
public int maximumSwap(int num) {
char[] A = Integer.toString(num).toCharArray();
char[] ans = Arrays.copyOf(A, A.length);
for (int i = 0; i < A.length; i++) {
for (int j = i + 1; j < A.length; j++) {
char tmp = A[i];
A[i] = A[j];
A[j] = tmp;
for (int k = 0; k < A.length; k++) {
if (A[k] != ans[k]) {
if (A[k] > ans[k]) {
ans = Arrays.copyOf(A, A.length);
}
break;
}
}
A[j] = A[i];
A[i] = tmp;
}
}
return Integer.valueOf(new String(ans));
}
}
JavaScript soluzione
abbinato/originalevar maximumSwap = function(num) {
let A = num.toString().split('');
let ans = [...A];
for (let i = 0; i < A.length; i++) {
for (let j = i + 1; j < A.length; j++) {
[A[i], A[j]] = [A[j], A[i]];
for (let k = 0; k < A.length; k++) {
if (A[k] !== ans[k]) {
if (A[k] > ans[k]) {
ans = [...A];
}
break;
}
}
[A[i], A[j]] = [A[j], A[i]];
}
}
return parseInt(ans.join(''));
}
Python soluzione
abbinato/originaleclass Solution:
def maximumSwap(self, num: int) -> int:
A = list(str(num))
ans = A[:]
for i in range(len(A)):
for j in range(i + 1, len(A)):
A[i], A[j] = A[j], A[i]
for k in range(len(A)):
if A[k] != ans[k]:
if A[k] > ans[k]:
ans = A[:]
break
A[i], A[j] = A[j], A[i]
return int(''.join(ans))
Go soluzione
abbinato/originalefunc maximumSwap(num int) int {
A := []rune(strconv.Itoa(num))
ans := make([]rune, len(A))
copy(ans, A)
for i := 0; i < len(A); i++ {
for j := i + 1; j < len(A); j++ {
A[i], A[j] = A[j], A[i]
for k := 0; k < len(A); k++ {
if A[k] != ans[k] {
if A[k] > ans[k] {
copy(ans, A)
}
break
}
}
A[i], A[j] = A[j], A[i]
}
}
result, _ := strconv.Atoi(string(ans))
return result
}
Algorithm
Сохраняем кандидатов как списки длины len(num). Для каждой пары позиций (i, j) выполняем обмен цифр, записываем кандидата, если он больше текущего ответа, затем возвращаем цифры обратно.
Проверяем, что не добавили ведущий ноль. Фактически, проверять это не нужно, так как изначальное number его не содержит.
Возвращаем максимальное значение из всех кандидатов.
😎
Vacancies for this task
offerte attive with overlapping task tags are mostrati.
Non ci sono ancora offerte attive.