数组中只有一个数出现了1次,其他的数都出现了k次,请输出只出现了1次的数。
解析:把十进制的数转化为k进制,k个k进制的数进行不进位相加,结果是0;那么剩下的就是那个出现一次的数。
eg:有10个11进行相加,原本1*10=10,原本应该进位的1舍去,就只能剩下0了。
public class _07_出现k次 { public static void main(String[] args) { // TODO Auto-generated method stub int [] arr= {2,2,2,9,7,7,7,3,3,3,6,6,6,0,0,0}; int len=arr.length;//len:16 char[][] kRadix=new char[len][]; //kRadix:char[16][] int k=3; int maxlen=0; //转成k进制字符数组 //对于每个数字 for(int i=0;i<len;i++) { kRadix [i]=new StringBuilder(Integer.toString(arr[i],k)).reverse().toString().toCharArray(); if(kRadix[i].length>maxlen) { maxlen=kRadix[i].length; } } int[] resArr =new int[maxlen]; for(int i=0;i<len;i++) { //不进制加法 for(int j=0;j<maxlen;j++) { if(j>=kRadix[i].length) resArr[j]+=0; else resArr[j]+=(kRadix[i][j]-'0'); } } int res=0; for(int i=0;i<maxlen;i++) { res += (resArr[i]%k)*(int)(Math.pow(k, i)); } System.out.println(res); } }
学习笔记总目录: 最全的2021蓝桥杯算法课《算法很美》的学习笔记总目录