2015-01-11 49 views
1

新手在這裏。我正在練習面試的數據結構和算法。我被困在這種情況下,基本上它需要將整數(例如615)分解爲其數字(例如6,1,5)。我在網上找到了一個解決方案,但是我覺得必須有一個更好更簡單的方法來做到這一點?Java - 如何將整數分解爲其數字

這裏是我找到了解決辦法 -

int total = sum1 + sum2; //This is the number we want to split 
Integer totalInt = new Integer(total); 
String strSum = totalInt.toString(); 

for (int i = 0; i < strSum.length(); i++) { 
    String subChar = strSum.substring(i, i + 1); 
    int nodeData = Integer.valueOf(subChar); 
    newList.append(new Node(nodeData)); //irrelevant in context of question 
} 
+1

什麼[toCharArray(http://stackoverflow.com/questions/10006165/converting-string-to-character-array-in-java) –

+0

@BogdanKuštan啊,我有點想過但問題是它將數字存儲爲char(s),我們希望它們保持int狀態。說得通? – satnam

+0

所以你可以使用'Character.getNumericValue(element.charAt(0));'或者這些很貴?我對Java並不是很擅長,但這是一種乾淨的方式,不知道它有多快。 –

回答

2

與任何基地這一個工程:

int input = yourInput; 
final int base = 10; //could be anything 
final ArrayList<Integer> result = new ArrayList<>(); 
while(input != 0) { 
    result.add(input % (base)); 
    input = input/base; 
} 

如果需要排序,以便最數字重要的是第一個,你可以使用Stack而不是List作爲結果變量。

1

這取決於你想用破碎的數字到底該怎麼做;但對於一個例子,這裏是添加了一個正整數的數字的方式:

int sumOfDigits = 0; 
while (n > 0) { 
    final int lastDigit = n % 10; // remainder of n divided by 10 
    sumOfDigits += lastDigit; 
    n /= 10;       // divide by 10, to drop the last digit 
} 
+0

我的壞...我會留在這裏給你看,然後刪除30,29,28 .... – tddmonkey

1

試試這個

int total = 123; //This is the number we want to split 
Integer totalInt = new Integer(total); 
String strSum = totalInt.toString(); 
String nums[] = strSum.split(""); 

// First element will be empty 
// Changed loop initial value i to 0 from 1 
for(int i = 0; i < nums.length; i++) { 
    System.out.println(nums[i]); 
    // Or if you want int from it, then 
    System.out.println(Integer.parseInt(nums[i])); 
} 

輸出:

1 
2 
3 
1

你可以讓你的方法多用的一種方法是通過使一個Spliterator。這意味着它可以產生可用於任何目的的Integer流:將它們相加,將它們添加到列表中,無論如何。

如果你不熟悉spliterators,這裏有一個例子:

public class Digitiser implements Spliterators.OfInt { 
    private int currentValue; 
    private final int base; 
    public Digitiser(int value, int base) { 
     currentValue = value; 
     this.base = base; 
    } 
    public boolean tryAdvance(IntConsumer action) { 
     if (currentValue == 0) { 
      return false; 
     } else { 
      int digit = value % base; 
      value /= base; 
      action.accept(digit); 
      return true; 
     } 
    } 
    public static IntStream stream(int value, int base) { 
     return StreamSupport.intStream(new Digitiser(value, base), false); 
} 

現在你已經有了一個通用的數字轉換器,可以用來做各種各樣的事情:

Digitiser.stream(13242, 10).sum(); 
Digitiser.stream(42234, 2).collect(Collectors.toList()); 
1

您可以使用toCharArray():

char[] digits = strSum.toCharArray(); 

然後,將其轉換爲int []:

int[] numbers = new int[digits.length]; 

for (int i = 0; i < numbers.length; i++) { 
    numbers[i] = digits[i] - '0'; 
} 
+0

的工作,但我想保留這些數字爲int,而不是字符。 char []會將它們存儲爲char(s)...任何解決方案? – satnam

+0

爲什麼要將數字存儲爲整數? – felipecrp

+0

因爲那就是問題所在。例如。得到這些數字後,我可能想對它們進行數學運算。如果這些數字是字符格式,我將無法這樣做... – satnam