fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10. public static void main (String[] args) throws java.lang.Exception
  11. {
  12. // your code goes here
  13.  
  14. f623("111");
  15. f623("1110");
  16. f623("101100");
  17. }
  18.  
  19. /**
  20. * 1のビットがN個ある二進表記文字列が与えられたとき、
  21. * 次に大きい1のビットがN個ある二進表記文字列を求める。
  22. * @param s 1のビットがN個ある二進表記文字列
  23. * @return 次に大きい1のビットがN個ある二進表記文字列
  24. */
  25. static String f623(String s) {
  26. List<String> list = new ArrayList<String>(s.length());
  27. int n = 0;
  28. for (int i = 0; i < s.length(); i++) {
  29. int j = (s.length() - 1) - i;
  30. if (s.regionMatches(j, "1", 0, 1)) {
  31. list.add(i, "1"); // リテラル(コンスタントプール)を入れるので
  32. n++;
  33. } else if (s.regionMatches(j, "0", 0, 1)) {
  34. list.add(i, "0");
  35. } else {
  36. }
  37. }
  38.  
  39. if (n == 0) {
  40. }
  41.  
  42. int c = 0;
  43. while (c != n) {
  44. int d = 1;
  45. c = 0;
  46. for (int i = 0; i < list.size(); i++) {
  47. if (d == 0) {
  48. if ("1" == list.get(i)) { // equals()使わなくてOK
  49. c++;
  50. if (c > 3) {
  51. break;
  52. }
  53. }
  54. } else {
  55. if ("1" == list.get(i)) {
  56. list.set(i, "0");
  57. } else {
  58. list.set(i, "1");
  59. d = 0;
  60. c++;
  61. }
  62. }
  63. }
  64. if (d == 1) {
  65. list.add("1");
  66. }
  67. }
  68.  
  69. StringBuilder dest = new StringBuilder(list.size());
  70. for (String p : list) {
  71. dest.append(p);
  72. }
  73. String result = dest.reverse().toString();
  74. System.out.println(s + " -> " + result);
  75. return result;
  76. }
  77. }
Success #stdin #stdout 0.07s 380224KB
stdin
Standard input is empty
stdout
111 -> 1011
1110 -> 10011
101100 -> 110001