输入一个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:以整数形式接收数字,取余数求每一位数字,然后把不重复每一位数字存到链表中
代码:
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 }
原文:http://www.cnblogs.com/crazybuddy/p/5322767.html