2015-05-13 27 views
6

Verilen soru: basamak dizisi olarak temsil edilen bir negatif olmayan bir sayı göz önüne alındığında ,ArrayList

numarası (basamak temsil ettiği sayıyı artırmak) 1 eklenir.

Haneler, en önemli basamak listenin başında olacak şekilde depolanır.

Örnek: vektör varsa

[1, 2, 3]

geri vektörü olmalıdır [1, 2, 4]

olarak 123 + 1 = 124.

Test durumda,

public class Solution { 
    public ArrayList<Integer> plusOne(ArrayList<Integer> A) {  
     int carry = 1; 
     int length = A.size(); 
     ArrayList result = new ArrayList(); 

     for(int i = length - 1; i >=0; i--){ 
      int val = A.get(i) + carry; 
      result.add(0,val % 10); 
      carry = val/10; 
     } 

     if (carry == 1){ 
      result.add(0,1); 
     } 

     for (int j = 0; j < result.size(); j++){ 
      if(result.get(j).equals(0)) 
       result.remove(j); 
      else 
       break; 
     } 

     return result; 

    } 
    } 

Ancak:

Bu benim kodudur A [0, 6 0, 6, 4, 8, 8, 1]

doğru cevap

iken zaman fonksiyonu

döner söyler 6 0 6 4 8 8 2

Kodumda neyin yanlış olduğu hakkında hiçbir fikrim yok.

Teşekkürler!

cevap

7
if(result.get(j).equals(0)) 
    result.remove(j); 
else 
    break; 

her endeksi böyle olur İşte 0'a içeriyorsa, bu başarısız olur:

0 6 0 6 4 8 8 2 
^ (j = 0) 

0 kaldırılacak ve j birer artırılır.

6 0 6 4 8 8 2 
^(j = 1) 

Ardından bu 0, dizininizdeki ilk 6 atlanarak da kaldırılır. Bunu düzeltmek için, şu pasajı değiştirin:

Bu j herhangi kaldırılan 0s hemen sonra numarayı atlamak olmaz böylece bir dizin kaldırıldığında dengeler
if(result.get(j).equals(0)) 
    result.remove(j--); 
else 
    break; 

.

+0

ne olacak j = 0, 0 değeri, Sanshai28 @ j-- – Sanshayan

+0

'' için (int j = 0 hiçbir unsur yoktur vardır; j

+0

@PatrickRoberts Şimdilik teşekkürler anlıyorum – Sanshayan

0

Kontrol dışarı Looping through and arraylist and removing elements at specified index

basit de benzer bir soru sadece

while (!result.isEmpty() && result.get(0).equals(0)) { 
    result.remove(0); 
} 

Bu en 0 artık sol en sıfır silinecek orada kadar sol kaldırmaya devam eder yapmak.

+0

Not için teşekkürler! Bunun bir dizi listesinin önündeki çoğaltmaları ortadan kaldırmanın daha zarif bir yolu olduğunu düşünüyorum. –

+0

İşlevi, işlevinin her zaman negatif olmayan tamsayılarla diziler aldığını varsayarak, 1 ekledikten sonra, bu döngüye ulaştığında boş olan veya boş olacak bir diziniz olmayacaktır. –

+0

Giriş dizisi muhtemelen ilk sırada ön taraftaki 0 ​​rakam içermeli ve negatif olmayan bir sayı içermelidir. Eğer 1 ile eklerseniz, sonuçtan önce 0 sayısının olması için hiç şansı yoktur. – Nat

0

Son for döngü 0 sonucundan çıkıyor ArrayList<Integer>.Bu döngü çıkardıktan sonra, mükemmel çıktı alacak

public static ArrayList<Integer> plusOne(ArrayList<Integer> A) {  
    int carry = 1; 
    int length = A.size(); 
    ArrayList result = new ArrayList(); 

    for (int i = length - 1; i >= 0; i--) { 
     int val = A.get(i) + carry; //2 8 
     result.add(0, val % 10); // 2 8 
     carry = val/10; 
    } 

    if (carry == 1) { 
     result.add(0, 1); 
    } 

// for (int j = 0; j < result.size(); j++) { 
//  if (result.get(j).equals(0)) 
//   result.remove(j); 
//  else 
//   break; 
// } 

    for (boolean isZero = true; isZero;) { 
     isZero = result.get(0).equals(0); 

     if(isZero) 
      result.remove(0); 
    } 

    return result; 
} 
+0

Tamam düzelteceğim .. teşekkürler – Kushal

+0

@PatrickRoberts Cevabımı düzenledim .. bu sizin requrement'ine göre .. çıktı: ** [6, 0, 6, 4, 8, 8, 2] ** – Kushal