создание списка чисел палиндрома - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь создать List чисел палиндрома, которые сделаны из произведения двух трехзначных чисел, но возвращаются []. Что я делаю не так?

edit: я не смог добавить функцию isPalindrome, потому что stackoverflow жаловался бы, что «мой пост в основном код». Что-то не так с моей функцией isPalindrome?

public class Solution {




//list of digit numbers of a number
ArrayList<Long> digits = new ArrayList<>();

//list of palindrome numbers
public ArrayList<Long> pal = new ArrayList<>();


// checks if the given number is a palindrome
boolean isPalindrome(long num) {


// creates list of digit numbers of a number
// ex. 12345 -> [5,4,3,2,1]
while(num > 0) {
  long lastdigit = num % 10;
  digits.add(lastdigit);
  num = num / 10;
}

//checks if the number is a palindrome by checking the first and last index

// when the number of digits is even
if(digits.size() % 2 == 0) {
  while(digits.size() > 0) {
    int last = digits.size() - 1;

    if (digits.get(0) == digits.get(last)) {
      digits.remove(last);
      digits.remove(0);
    }
    else {
      return false;
      }

    }
return true;

  }

// when the number of digits is odd
else  while(digits.size() > 1) {

  int last = digits.size() - 1;
  if (digits.get(0) == digits.get(last)) {
    digits.remove(last);
    digits.remove(0);
  }
  else {
    return false;
    }

  }

  return true;

}


    ArrayList<Long> findPal() {

        for (long i = 100; i <= 999; i++) {
            for (long j = 100; j <= 999; j++) {
                Long product = i * j;

                if (isPalindrome(product)) {
                    pal.add(product);
                }
            }
        }
        return pal;
    }
    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.isPalindrome((long)121)); //true
        System.out.println(sol.isPalindrome((long)12345)); // false
        System.out.println(sol.findPal()); //[]
    }
}

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

Изменить:

В функции isPalindrome ()

if (digits.get(0) == digits.get(last)) {
      digits.remove(last);
      digits.remove(0);
 }
 else {
    return false;
 }

Здесь, в блоке Else, вам нужно очистить список цифр. это главная проблема, которую вы не очищаете.

Я просто использую ваш код и только что создал свою функцию isPalindrome, и все работает нормально.

Посмотрите на этот код.

public class Solution {

    ArrayList<Long> digits = new ArrayList<>();

    ArrayList<Long> pal = new ArrayList<>();

    ArrayList<Long> findPal() {

        for (long i = 100; i <= 999; i++) {
            for (long j = 100; j <= 999; j++) {
                Long product = i * j;

                if (isPalindrome(product)) {
                    pal.add(product);
                }
            }
        }
        return pal;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.isPalindrome((long) 121)); // true
        System.out.println(sol.isPalindrome((long) 12345)); // false
        System.out.println(sol.findPal()); // []
    }

    private boolean isPalindrome(Long longValue) {

        Long temp = longValue;
        String tempLong = "";
        while (temp != 0) {
            tempLong = tempLong + temp % 10 + "";
            temp = temp / 10;
        }

        return Long.parseLong(tempLong) == longValue;
    }
}
0 голосов
/ 05 мая 2018

У вас должна быть функция, в которой после передачи числа из циклов он должен отделять числа в одну цифру и возвращать значение true, если обратное также верно

Например: 121 -> 121% 10 -> 1 Тогда 121/10 -> 12 Точно так же продолжайте делать это, пока его модуль не равен нулю Затем умножьте наибольшее число на (длина цифры -1) как 1 * 100 + 2 * 10 + 1 Если это то же самое, то это палиндром Я знаю, это довольно долго, но это самая простая вещь!

0 голосов
/ 05 мая 2018

Скорее всего, проблема в методе isPalindrome, который вы нам не показали.

Есть несколько других проблем:

  1. Поле pal действительно должно быть локальной переменной в методе findPal. (Подсказка: что произойдет, если вы дважды наберете findPal()? Как только вы найдете ошибку в isPalindrome, попробуйте ...)

  2. Список созданных вами палиндромных чисел, скорее всего, будет содержать дубликаты. Например, если 104 x 521 - палиндромное число, то будет также 521 x 104.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...