*Use modulo operation to retrieve original data and due to the question requirement that all the elements are range from 1 to n inclusive, so after increment "len", the elements that have appeared once will range from len+1 to 2len. Hence the duplicates will range from 2len+1 to 3*len in the same way. :) Hope it helps.

```
public List<Integer> findDuplicates(int[] nums) {
int len = nums.length;
for(int i = 0 ; i < len ; i++){
nums[(nums[i]-1)%len] +=len;
}
List<Integer> res = new ArrayList<>();
for(int i = 0 ; i < nums.length ; i++){
if(nums[i]>2*len){
res.add(i+1);
}
}
return res;
}
}
```