解题思路:
首先数组nums的第一个元素一定是x,如果小于x,那么相与之后一定小于x。
其次,要想比x大,且尽可能小,就是填充x二进制数里的0,包括前导零。
通过将这些0变成1,可以发现这些剩下的0和变成的1也组成二进制数,数值就是第几小。
比如:x=4,二进制100,第一小100,第二小101,第三小110,第四小111。
其中00、01、10、11是原来0变成的。这些数值就代表了它的位次。
class Solution { public long minEnd(int n, int x) { List<Integer> arr=new ArrayList<>(); n-=1; while(n!=0){ arr.add(n%2); n/=2; } long ans=0; int cnt=-1; int record=x; for(int i=0;i<arr.size();i++){ int t=1; while(t!=0){ t=x%2; x/=2; cnt+=1; } if(arr.get(i)==0){ continue; } ans+=1L<<cnt; System.out.println(ans+" "+cnt); } return ans+record; } }
11-04
450