class Solution { public int strobogrammaticInRange(String low, String high) { long a = Long.parseLong(low); long b = Long.parseLong(high); int ans = 0; long[][] twoone = new long[][]{{0,11,69,88,96},{0,1,8}};//先放2位再放1位,因为这样求余数后面算起来方便 for(long v:twoone[1]){ if(v>b) return ans; if(v>=a) ++ans; } Queue queue = new LinkedList(); for(long v:twoone[0]){ //注意0不是两位数,所以不算一个两位,又 1001,这种情况需要补0,所以放入偶数中计算 if(v==0) continue; queue.offer(v); if(v>b) return ans; if(v>=a) ++ans; } //长度奇数 a+1=b,长度偶数 a+2=b,这个中间的1位或两位就从前面枚举数中找到 for(int i = 3; i =a) ++ans; if(i%2==0) queue.offer(newItem); } if(i%2!=0) queue.offer(v); } } return ans; } }
|