牛客0042 |一意の整数を抽出します

トピック情報

int整数を入力し、右から左への読み取り順序に従い、番号を繰り返さずに新しい整数を返します。入力した整数の最後の桁が0でないことを確認してください。

入力例:9876673

サンプル出力:37689

回答

大きなアイデアは、入力を文字の配列に逆アセンブルし、順序付けられたセットに文字を格納することです。文字がすでにセットに含まれている場合はスキップし、そうでない場合は文字がセットに入れられます。コレクションは、ArrayListまたはDequeを選択できます。

ArrayListとDequeに基づいて、2つの実装メソッドが提供されます

コーディング

方法1、入力番号を逆にした後、文字はArrayListに格納され、出力されます

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class ReverseNonRepetitionIntegers {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input;
		while ((input = br.readLine()) != null) {
			// 输入数字逆序
			StringBuffer sb = new StringBuffer(input);
			sb.reverse();
			
			// 逆序后数字转化为字符数组
			char[] numArr = sb.toString().toCharArray();
			
			// 遍历数组字符,并将字符入List
			List<Character> list = new ArrayList<>();
			for (char ch : numArr) {
				if (list.contains(ch)) {
					continue;
				} 
				
				list.add(ch);
			}
			
			// 将list中不重复字符输出
			StringBuffer returnSb = new StringBuffer();
			for (char ch : list) {
				returnSb.append(ch);
			}
			
			System.out.println(returnSb.toString());
		}
	}
}
 

方法2、入力番号を文字配列変換し、キューの先入れ先出し機能を使用して、結果番号を出力します。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Deque;
import java.util.LinkedList;

public class ReverseNonRepetitionIntegers {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input;
		while ((input = br.readLine()) != null) {
			
			// 将输入数字转为字符数组
			char[] numArr = input.toCharArray();
			
			// 使用队列存放字符,利用队列先进先出特点,最终输出数字
			Deque<Character> list = new LinkedList<>();
			for (int i=numArr.length-1; i>=0; i--) {
				if (!list.contains(numArr[i])) {
					list.push(numArr[i]);
				}
			}
			
			// 队列中有值时,使用pollLast方法,对先入队列的元素先出队列
			while(list.size()>0) {
				System.out.print(list.pollLast());
			}
			
			System.out.println();
		}
	}
}

 

上記の2つの実装方法、Niuke.comでの実行結果は次のとおりです。2番目の方法は実行時間が短く、使用するメモリが少なくなります。

おすすめ

転載: blog.csdn.net/magi1201/article/details/114855605