题解 | #自守数#

自守数

http://www.nowcoder.com/practice/88ddd31618f04514ae3a689e83f3ab8e

java 带缓存的暴力解法
 import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        TreeMap<Integer,Integer> map = new TreeMap<>();///保存遍历过的数
        while(sc.hasNext()){
            int result = 0;//结果
            int num = sc.nextInt();
            
            int start = -1;//保证start从0开始
            Map.Entry pre = null;//保存上一个entry
            for(Map.Entry e : map.entrySet()){//遍历map,查找第一个大于num的记录
                if(pre != null && (Integer)e.getKey() > num){
                    result = (Integer)pre.getValue();//拿上一个键值对,更新起始和当前result,从那之后继续追加result
                    start = (Integer)pre.getKey();
                    break;
                }else if((Integer)e.getKey() == num){
                     result = (Integer)e.getValue();//恰巧有计算过的值
                     start = (Integer)e.getKey();
                    break;
                }
                pre = e;//缓存上一个键值对
            }
            
            for(int i = start+1;i<=num;i++){//从start后一位开始,继续查找
               //对于 i = 25
                int k = 1;
                while(k <= i){
                    k *= 10; //k =100
                }
                int a = i * i % (k); // a = 625%100 = 25 
                int b = i ;          // b = 25
                if(a == b){
                    result++;
                }
            }
            map.put(num,result);//缓存记录
            System.out.println(result);
            
        }
    }
}


全部评论

相关推荐

在评审的大师兄很完美:像这种一般就是部门不匹配 转移至其他部门然后挂掉 我就是这样被挂了
点赞 评论 收藏
分享
牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务