题目描述
输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
输入描述:
输入一个int型整数
输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
输入例子:
9876673
输出例子:
37689
思路1:以字符串形式接收数字,使用ArrayList接收数组中不重复的元素
代码:
1 import java.util.*; 2 3 public class Test1 { 4 5 public static void main(String[] args) { 6 Scanner sc =new Scanner(System.in); 7 String s = sc.next(); 8 int len = s.length(); 9 List<String> li = new ArrayList<String>(); 10 for(int i=len-1;i>=0;i--){ 11 if(!(li.contains(String.valueOf(s.charAt(i))))){ 12 li.add(String.valueOf(s.charAt(i))); 13 } 14 } 15 int len1=li.size(); 16 for(int i=0;i<len1;i++){ 17 System.out.print(li.get(i)); 18 } 19 sc.close(); 20 } 21 22 }
思路2:沿着思路1继续思考,思路1中需要判断原链表中是否已经存在将要添加的元素,考虑能否不进行判断而直接添加,并自动去重呢?考虑Set集合,Set集合有HashSet,但是HashSet不能保证元素的排列顺序,顺序有可能发生变化,而TreeSet会使添加的数字按照大小自动升序排序;故考虑使用HashSet的子类LinkedHashSet,它可以使得元素看起来是以插入的顺序保存的,也就是说,当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里的元素。
代码:
1 import java.util.*; 2 3 public class Test3 { 4 5 public static void main(String[] args) { 6 Scanner sc =new Scanner(System.in); 7 String s = sc.next(); 8 int len = s.length(); 9 Set<String> li = new LinkedHashSet<String>(); 10 for(int i=len-1;i>=0;i--){ 11 li.add(String.valueOf(s.charAt(i))); 12 } 13 Iterator<String> it = li.iterator(); 14 while(it.hasNext()){ 15 System.out.print(it.next()); 16 } 17 sc.close(); 18 } 19 20 }
思路3:用栈来存储;判断如同使用List表一样,但注意的是不能使用pop方法依次返回栈顶元素因为整数的最后一位需要先进栈(题目要求从右向左读并去重),并且需要先输出,栈底元素位置为0,可以考虑使用从接口 java.util.List 继承的迭代器输出栈元素,或者使用从从类 java.util.Vector 继承的方法get(index)方法
代码:
1 import java.util.Scanner; 2 import java.util.Stack; 3 4 /** 5 * 使用栈来存储 6 * 7 * @author zbt 8 * 9 */ 10 public class Test4 { 11 12 public static void main(String[] args) { 13 14 Scanner sc = new Scanner(System.in); 15 String s = sc.nextLine(); 16 Stack<String> st = new Stack<String>(); 17 for (int i = 0; i < s.length(); i++) { 18 if (!st.contains(String.valueOf(s.charAt(i)))) { 19 st.push(String.valueOf(s.charAt(i))); 20 } 21 } 22 int len = st.size(); 23 for (int i = 0; i < len; i++) { 24 System.out.print(st.pop()); 25 } 26 sc.close(); 27 28 } 29 }
思路4:以整数形式接收数字,取余数求每一位数字,然后把不重复每一位数字存到链表中
代码:
1 import java.util.*; 2 3 public class Temp2{ 4 public static void main(String[] args){ 5 Scanner sc = new Scanner(System.in); 6 int n = sc.nextInt(); 7 List<Integer> li = new ArrayList<Integer>(); 8 Integer n1 = new Integer(n); 9 for(int i=0;i<n1.SIZE;i++){ 10 int temp=n1%10; 11 if(!li.contains(temp)&&(n1 !=0)){ 12 li.add(temp); 13 } 14 n1=n1/10; 15 } 16 for(Integer li1 : li){ 17 System.out.print(li1); 18 } 19 } 20 }