una transpuesta multiplicacion matriz matrices inversa intercambiar cuadrada columnas calculadora 3x3 2x2 java arrays reverse

transpuesta - Invertir una matriz en Java



multiplicacion de matrices java (15)

Esta pregunta ya tiene una respuesta aquí:

Si tengo una matriz como esta:

1 4 9 16 9 7 4 9 11

¿Cuál es la mejor manera de invertir la matriz para que se vea así?

11 9 4 7 9 16 9 4 1

Tengo el siguiente código, pero creo que es un poco tedioso:

public int[] reverse3(int[] nums) { return new int[] { nums[8], nums[7], nums[6], nums[5], num[4], nums[3], nums[2], nums[1], nums[0] }; }

¿Hay alguna forma más simple?


En caso de que no quiera usar una variable temporal, también puede hacer esto:

final int len = arr.length; for (int i=0; i < (len/2); i++) { arr[i] += arr[len - 1 - i]; // a = a+b arr[len - 1 - i] = arr[i] - arr[len - 1 - i]; // b = a-b arr[i] -= arr[len - 1 - i]; // a = a-b }


Este código ayudaría:

int [] a={1,2,3,4,5,6,7}; for(int i=a.length-1;i>=0;i--) System.out.println(a[i]);


Haría algo como esto:

public int[] reverse3(int[] nums) { int[] numsReturn = new int[nums.length()]; int count = nums.length()-1; for(int num : nums) { numsReturn[count] = num; count--; } return numsReturn; }


Inversión en el lugar con la cantidad mínima de swaps.

for (int i = 0; i < a.length / 2; i++) { int tmp = a[i]; a[i] = a[a.length - 1 - i]; a[a.length - 1 - i] = tmp; }


Lo siguiente invertirá en su lugar la matriz entre los índices i y j (para invertir toda la matriz llamada reverse(a, 0, a.length - 1) )

public void reverse(int[] a, int i , int j) { int ii = i; int jj = j; while (ii < jj) { swap(ii, jj); ++ii; --jj; } }


Me gusta mantener el conjunto original y devolver una copia. Esta es una versión genérica:

public static <T> T[] reverse(T[] array) { T[] copy = array.clone(); Collections.reverse(Arrays.asList(copy)); return copy; }

sin mantener la matriz original:

public static <T> void reverse(T[] array) { Collections.reverse(Arrays.asList(array)); }


O podrías recorrerlo a escondidas

int[] firstArray = new int[]{1,2,3,4}; int[] reversedArray = new int[firstArray.length]; int j = 0; for (int i = firstArray.length -1; i > 0; i--){ reversedArray[j++] = firstArray[i]; }

(nota: no he compilado esto, pero espero que sea correcto)


Puede usar org.apache.commons.lang.ArrayUtils: ArrayUtils.reverse(array)


Si desea revertir la matriz in situ:

Collections.reverse(Arrays.asList(array));

Funciona desde Arrays.asList devuelve un proxy de escritura Arrays.asList a la matriz original.


Si no quiere usar Collections , puede hacer esto:

for (i = 0; i < array.length / 2; i++) { int temp = array[i]; array[i] = array[array.length - 1 - i]; array[array.length - 1 - i] = temp; }


lo arruinaste

int[] firstArray = new int[]{1,2,3,4}; int[] reversedArray = new int[firstArray.length]; int j = 0; for (int i = firstArray.length -1; i >= 0; i--){ reversedArray[j++] = firstArray[i]; }


prueba esto:

public int[] reverse3(int[] nums) { int[] reversed = new int[nums.length]; for (int i=0; i<nums.length; i++) { reversed[i] = nums[nums.length - 1 - i]; } return reversed; }

Mi entrada fue:

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12

Y la salida que obtuve:

12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1


puede enviar la matriz original a un método, por ejemplo:

después de eso, creas una nueva matriz para contener los elementos invertidos

public static void reverse(int[] a){ int[] reversedArray = new int[a.length]; for(int i = 0 ; i<a.length; i++){ reversedArray[i] = a[a.length -1 -i]; }


Collections.reverse() puede hacer ese trabajo por usted si coloca sus números en una List de Integers .

List<Integer> list = Arrays.asList(1, 4, 9, 16, 9, 7, 4, 9, 11); System.out.println(list); Collections.reverse(list); System.out.println(list);

Salida:

[1, 4, 9, 16, 9, 7, 4, 9, 11] [11, 9, 4, 7, 9, 16, 9, 4, 1]


public void swap(int[] arr,int a,int b) { int temp=arr[a]; arr[a]=arr[b]; arr[b]=temp; } public int[] reverseArray(int[] arr){ int size=arr.length-1; for(int i=0;i<size;i++){ swap(arr,i,size--); } return arr; }