java – 从给定的数字查找下一个最高的唯一编号

前端之家收集整理的这篇文章主要介绍了java – 从给定的数字查找下一个最高的唯一编号前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定一组n个符号,大小k和来自符号集合的非重复字符的长度k的组合,仅写入迭代算法来打印可以进行的下一个最高唯一数字.

例如:

  1. Symbols =[1,2,3,4,5]
  2. size = 3;
  3. given combination = 123,result = 124
  4. given combination = 254,result = 312

解决方法

这是一个伪代码算法:
  1. int n = length(Symbols);
  2. int k = length(A);
  3. // TRACK WHICH LETTERS ARE STILL AVAILABLE
  4. available = sort(Symbols minus A);
  5. // SEARCH BACKWARDS FOR AN ENTRY THAT CAN BE INCREASED
  6. for (int i=k-1; i>=0; --i) {
  7. // LOOK FOR NEXT SMALLEST AVAILABLE LETTER
  8. for (int j=0; j<n-k; ++j) {
  9. if (A[i] < available[j]) {
  10. break;
  11. }
  12. }
  13. if (j < n-k) {
  14. // CHANGE A[i] TO THAT,REMOVE IT FROM AVAILABLE
  15. int tmp = A[i];
  16. A[i] = available[j];
  17. available[j] = tmp;
  18. // RESET SUBSEQUENT ENTRIES TO SMALLEST AVAILABLE
  19. for (j=i+1; i<k; ++j) {
  20. A[j] = available[i+1-j];
  21. }
  22. return A;
  23. } else {
  24. // A[i] MUST BE LARGER THAN AVAILABLE,SO APPEND TO END
  25. available = append(available,A[i]);
  26. }
  27. }

猜你在找的Java相关文章