LetCode- entrevistar algoritmos clássicos (java alcançar) [LetCode002: Adicionar dois números]

I, Título Descrição

Você é dado duas listas não vazias ligados representando dois inteiros não negativos. Os dígitos são armazenados em ordem inversa
e cada um dos seus nós contêm um único dígito. Adicione os dois números e devolvê-lo como um list.You ligada pode assumir os dois números não contêm nenhuma zero à esquerda, exceto o número 0 em si.

Dadas duas lista não-vazia para representar o inteiro dois não-negativo. O número de bits armazenados em ordem inversa, eles cada nó armazena apenas um único dígito. Os dois números juntos e retorna uma nova lista. Você pode assumir que, para além dos números 0, estas duas figuras não vai começar com um zero.

Exemplo:
Entrada: (2 -> 4 -> 3) + (5 -> 6 -> 4)
de saída: 7 -> 0 -> 8
Explicação: 342 + 465 = 807.

Em segundo lugar, as ideias de resolução de problemas

Em resumo, há um método violenta, o valor armazenado de cada lista encadeada em uma cadeia, em seguida, invertido, e finalmente expresso como um valor numérico. O resultado obtido adicionando a cadeia de caracteres torna-se invertido, e então convertido em uma lista ligada. Eu acho um pouco demais, não tão bom como adição direta da posição correspondente. Ele vai aparecer várias situações: 1, não há carry e carry. 2, o comprimento do mesmo comprimento de cadeia e cadeia inconsistente. Enquanto o negócio com o maior número de casos complexos em um carry e o comprimento de inconsistências pode resolver todo o problema.

No caso do transporte pode ser usado duas variáveis, uma loja dividido por 10, uma loja é dividida por 10. O novo valor de posição da lista nó i, a posição dos valores correspondentes nó de I A e B lista ea lista A e listas lista B correspondentes à posição i-1 eo valor do nó eo provedor. Isso a.value + b.value + nextNum.     

Para comprimento da cadeia inconsistências, os dois receberam um impacto combinado lista ordenada, o excesso parte da fusão para o loop de volta, encontrado dentro da instrução IF também deve considerar o caso de transporte para uma longa lista de cada nó, um pouco de dificuldade, como um ainda iria colocar juntos. Quando o último ciclo, a lista curta é nós vazios, os nós com uma longa lista de valores, então ele vai curta lista de nós para ser resumido valor para zero. Finalmente, um caso especial é o mesmo comprimento A, B da lista, mas há um carry, o fora do circuito, está determinado a não valor carry 1, se ele está na lista, em seguida, um novo nó é o nó cauda, ​​e estabelecer uma relação de conexão.

, Implementação de código terceiro


public class LetCode002 {
	static class ListNode{
		int val;
		ListNode next;
		
		public ListNode() {};
		
		public ListNode(int val) {
			this.val = val;
		}
	}
    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode result = new ListNode();
		ListNode head = result;
		int nextNum = 0 , value;
		while(l1 != null || l2 != null) {
			int val1 = l1 != null?l1.val:0;//如果未空就为0
			int val2 = l2 != null?l2.val:0;//如果为空就为0
			//结果串的值
			value = (val1+val2+nextNum) % 10;
			nextNum = (val1+val2+nextNum) / 10;//是否有进位
			result.next = new ListNode(value);
			if(l1 !=  null) {
				l1 = l1.next;
			}
			if(l2 != null) {
				l2 = l2.next;
			}
			result = result.next;
		}
		if (nextNum > 0) {
			result.next = new ListNode(nextNum);
	    }
		return head.next;
    }

    private static void print(ListNode result) {
		if(result == null) {
			throw new RuntimeException("invaild input! result is null");
		}
		
		while(result != null) {
			if(result.next != null ) {
				System.out.print(result.val + ">");
			}else if(result.val >= 0) {
				System.out.print(result.val );
			}
			result = result.next;
		}

	}
	public static void main(String[] args) {
		test1();
		System.out.println();
		test2();
		System.out.println();
		test3();
	}
	private static void test3() {
		ListNode l1 = new ListNode(1);
		ListNode l21 = new ListNode(9);
		ListNode l22 = new ListNode(9);
		l21.next = l22;
		ListNode result = addTwoNumbers(l1 , l21);
		print(result);
	}
	public static void test1() {
		ListNode l1 = new ListNode(2);
		ListNode l2 = new ListNode(4);
		ListNode l3 = new ListNode(3);
		l1.next = l2;
		l2.next = l3;
		
		ListNode l21 = new ListNode(5);
		ListNode n2 = new ListNode(6);
		ListNode n3 = new ListNode(4);
		l21.next = n2;
		n2.next = n3;
		ListNode result = addTwoNumbers(l1 , l21);
		print(result);
	}
	
	public static void test2() {
		ListNode l1 = new ListNode(0);
		
		ListNode l21 = new ListNode(1);
		ListNode n2 = new ListNode(8);
		l21.next = n2;
		ListNode result = addTwoNumbers(l1 , l21);
		print(result);
	}
	
}

--------------------- 
Autor: Rusian_Stand 
Fonte: CSDN 
Original:
Direitos de autor: Este artigo é um artigo original blogger, reproduzido, por favor anexar ligação Bowen!

Publicado 14 artigos originais · ganhou elogios 1 · vista 5527

Acho que você gosta

Origin blog.csdn.net/Vpn_zc/article/details/84072996
Recomendado
Clasificación