#java #arrays #integer
Вопрос:
В n
целом числе, где n = 1237534
(например) Я должен удалить цифру 3
, чтобы получить максимально возможное значение. n
также может быть отрицательным числом.
Я могу получить 127534
или 123754
.
Конечно , больше 127534
, но как я могу его вернуть?
Я пробовал что-то подобное:
int n = 1237534;
String newNum = String.valueOf(n);
int[] newGuess = new int[newNum.length()];
for (int i = 0; i < newNum.length(); i ) {
newGuess[i] = newNum.charAt(i) - '0';
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < newGuess.length; i ) {
if (!(newGuess[i] % 3 == 0)) {
sb.append(newGuess[i]);
}
}
System.out.println(sb);
Я получаю 12754
неправильный ответ. У кого-нибудь, может быть, есть идея, как ее решить?
Комментарии:
1.
charAt()
вернет первое вхождение 3. Вы можете использовать подстроку, чтобы удалить ее.String result = str.substring(0, index) str.substring(index 1);
Нет необходимости в петлях. Я даже не уверен, что они делают.
Ответ №1:
Для этого не требуются массивы или циклы:
int n = 1237534;
String newNum = String.valueOf(n);
char c = '3';
StringBuilder sb1 = new StringBuilder( newNum );
StringBuilder sb2 = new StringBuilder( newNum );
int newGuess1 = Integer.parseInt(sb1.deleteCharAt(newNum.indexOf(c)).toString());
int newGuess2 = Integer.parseInt(sb2.deleteCharAt(newNum.indexOf(c, newNum.indexOf(c) 1)).toString());
System.out.println( newGuess1 > newGuess2 ? newGuess1: newGuess2 );
Ответ №2:
Вот альтернативный подход, который также проверяет, действительно ли число содержит цифру. В противном случае может возникнуть исключение, если индекс возвращает -1.
Метод просто удаляет первое или последнее вхождение цифры в зависимости от того, является ли число отрицательным или нет.
int n = 1234321;
int bad_digit = 3;
StringBuilder sb = new StringBuilder(Integer.toString(n));
String bad = Integer.toString(bad_digit);
int idxOfFirst = sb.indexOf(bad);
// first, make certain the number contains the digit.
if (idxOfFirst >= 0) {
if (sb.charAt(0) == '-') {
// if negative, delete last character to give the larger value
sb.deleteCharAt(sb.lastIndexOf(bad));
} else {
// else delete the first character to give the larger value
sb.deleteCharAt(idxOfFirst);
}
}
System.out.println(sb);
Это печатает строку, а не преобразует ее в целое число, так как печать целого числа в любом случае приводит к преобразованию в строку. Если цифра не указана в исходном номере, то печатается оригинал. Вы можете изменить эту обработку в соответствии с вашими требованиями.
Ответ №3:
Как насчет этого:
int n = 123454321;
int bad_digit = 3;
StringBuilder s = new StringBuilder(n "");
s.reverse();
System.out.println("Reversed String: " s);
for (int i = 0; i < s.length(); i ) {
// Check if the character at index 'i' and the
// digit are equal, by converting both to strings
if (("" s.charAt(i)).equals("" bad_digit)) {
s.replace(i, i 1, "");
break;
}
}
System.out.println("Reversed String after removing the digit (if found): " s);
s.reverse();
System.out.println("Greatest number without the bad digit: " s);
В принципе, нам нужно удалить последнее вхождение удаляемой цифры (the bad_digit
). Поэтому мы преобразуем число в строку и переворачиваем его. Теперь нам нужно удалить первое вхождение цифры. Поэтому мы перебираем символы, и когда мы находим эту цифру, мы удаляем ее из строки и выходим из цикла. Теперь мы снова перевернем строку, и результат будет таким, как вы хотите.