Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示

简介: Java每日一练(20230430) 文本左右对齐、素数和、整数转英文表示

1. 文本左右对齐

给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。

你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ' ' 填充,使得每行恰好有 maxWidth 个字符。

要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。

文本的最后一行应为左对齐,且单词之间不插入额外的空格。

说明:

  • 单词是指由非空格字符组成的字符序列。
  • 每个单词的长度大于 0,小于等于 maxWidth
  • 输入单词数组 words 至少包含一个单词。

示例:

输入:

words = ["This", "is", "an", "example", "of", "text", "justification."]

maxWidth = 16

输出:

[
   "This    is    an",
   "example  of text",
   "justification.  "
]

示例 2:

输入:

words = ["What","must","be","acknowledgment","shall","be"]

maxWidth = 16

输出:

[
  "What   must   be",
  "acknowledgment  ",
  "shall be        "
]

解释: 注意最后一行的格式应为 "shall be    " 而不是 "shall     be"

因为最后一行应为左对齐,而不是左右两端对齐,第二行同样为左对齐,这是因为这行只包含一个单词。


示例 3:

输入:

words = ["Science","is","what","we","understand","well","enough","to","explain",

        "to","a","computer.","Art","is","everything","else","we","do"]

maxWidth = 20

输出:

[
  "Science  is  what we",
  "understand      well",
  "enough to explain to",
  "a  computer.  Art is",
  "everything  else  we",
  "do                  "
]


以下程序实现了这一功能,请你填补空白处内容:

```Java
class Solution {
    public List fullJustify(String[] words, int maxWidth) {
        List ret = new ArrayList<>();
        int index = 0;
        while (index < words.length) {
            int cur = index, len = 0;
            while (cur < words.length && len + words[cur].length() + cur - index <= maxWidth) {
                len = len + words[cur++].length();
            }
            cur--;
            StringBuilder sb = new StringBuilder();
            if (cur == words.length - 1) {
                for (int i = index; i <= cur; i++) {
                    sb.append(words[i]);
                    if (i < cur) {
                        sb.append(' ');
                    }
                }
            } else {
                int base = cur > index ? (maxWidth - len) / (cur - index) : (maxWidth - len);
                String baseStr = genSpace(base);
                int left = cur > index ? (maxWidth - len) % (cur - index) : 0;
                String leftStr = genSpace(base + 1);
                for (int i = index; i <= cur; i++) {
                    sb.append(words[i]);
                    ___________________;
                }
            }
            if (sb.length() < maxWidth) {
                sb.append(genSpace(maxWidth - sb.length()));
            }
            ret.add(sb.toString());
            index = cur + 1;
        }
        return ret;
    }
    private String genSpace(int n) {
        char[] cs = new char[n];
        Arrays.fill(cs, ' ');
        return new String(cs);
    }
}
```

出处:

https://edu.csdn.net/practice/26880552

代码:

import java.util.*;
public class fullJustify {
    public static class Solution {
        public List<String> fullJustify(String[] words, int maxWidth) {
            List<String> ret = new ArrayList<>();
            int index = 0;
            while (index < words.length) {
                int cur = index, len = 0;
                while (cur < words.length && len + words[cur].length() + cur - index <= maxWidth) {
                    len = len + words[cur++].length();
                }
                cur--;
                StringBuilder sb = new StringBuilder();
                if (cur == words.length - 1) {
                    for (int i = index; i <= cur; i++) {
                        sb.append(words[i]);
                        if (i < cur) {
                            sb.append(' ');
                        }
                    }
                } else {
                    int base = cur > index ? (maxWidth - len) / (cur - index) : (maxWidth - len);
                    String baseStr = genSpace(base);
                    int left = cur > index ? (maxWidth - len) % (cur - index) : 0;
                    String leftStr = genSpace(base + 1);
                    for (int i = index; i <= cur; i++) {
                        sb.append(words[i]);
                        if (i < cur) {
                            sb.append(left > 0 ? leftStr : baseStr);
                            left--;
                        }
                    }
                }
                if (sb.length() < maxWidth) {
                    sb.append(genSpace(maxWidth - sb.length()));
                }
                ret.add(sb.toString());
                index = cur + 1;
            }
            return ret;
        }
        private String genSpace(int n) {
            char[] cs = new char[n];
            Arrays.fill(cs, ' ');
            return new String(cs);
        }
    }
    public static void main(String[] args) {
        Solution sol = new Solution();
        String[] words = {"This", "is", "an", "example", "of", "text", "justification."};
        int maxWidth = 16;
        for (String str : sol.fullJustify(words, maxWidth)) {
            System.out.println("["+str+"]");
        }
        String[] words2 = {"What","must","be","acknowledgment","shall","be"};
        for (String str : sol.fullJustify(words2, maxWidth)) {
            System.out.println("["+str+"]");
        }
        String[] words3 = {"Science","is","what","we","understand","well","enough","to","explain",
            "to","a","computer.","Art","is","everything","else","we","do"};
        maxWidth = 20;
        for (String str : sol.fullJustify(words3, maxWidth)) {
            System.out.println("["+str+"]");
        }
    }
}

输出:

[This    is    an]
[example  of text]
[justification.  ]
[What   must   be]
[acknowledgment  ]
[shall be        ]
[Science  is  what we]
[understand      well]
[enough to explain to]
[a  computer.  Art is]
[everything  else  we]
[do                  ]

2. 求素数

求第m个到第n个素数之间的素数和

出处:

https://edu.csdn.net/practice/26880553

代码:

import java.util.Scanner;
public class All {
   public static void main(String[] args) {
      int a[] = new int[200];
      int index = 0;
      for (int i = 1; i < 200; i++) {
         boolean isPrime = true;
         for (int k = 2; k < i; k++) {
            if (i % k == 0) {
               isPrime = false;
               break;
            }
         }
         if (isPrime) {
            a[index++] = i;
            System.out.println(a[index - 1]);
         }
      }
      Scanner small = new Scanner(System.in);
      Scanner large = new Scanner(System.in);
      int m = small.nextInt();
      int n = large.nextInt();
      int sums = 0;
      int suml = 0;
      int sum = 0;
      for (int i = 0; i < m; i++) {
         sums += a[i];
         System.out.print(a[i] + "*");
      }
      for (int i = 0; i < n; i++) {
         suml += a[i];
         System.out.print(a[i] + " ");
      }
      sum = suml - sums;
      System.out.println(sum);
   }
}

输出:


3. 整数转换英文表示

将非负整数 num 转换为其对应的英文表示。

示例 1:

输入:num = 123

输出:"One Hundred Twenty Three"


示例 2:

输入:num = 12345

输出:"Twelve Thousand Three Hundred Forty Five"


示例 3:

输入:num = 1234567

输出:"One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"


示例 4:

输入:num = 1234567891

输出:"One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"


提示:

  • 0 <= num <= 2^31 - 1

出处:

https://edu.csdn.net/practice/26880554

代码:

import java.util.*;
public class numberToWords {
    public static class Solution {
        String[] withinTwentyNum = new String[] { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",
                "Nine", "Ten",
                "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" };
        String[] theWholeTen = new String[] { "", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty",
                "Ninety" };
        String[] unit = new String[] { "", "Thousand", "Million", "Billion" };
        public String numberToWords(int num) {
            if (num == 0) {
                return withinTwentyNum[num];
            }
            StringBuilder sb = new StringBuilder();
            int unitCount = 0;
            int temp;
            String[] words = new String[32];
            int wordIndex = 0;
            for (int n = num; num > 0; unitCount++) {
                n = num % 1000;
                num /= 1000;
                if (n == 0) {
                    continue;
                }
                words[wordIndex++] = unit[unitCount];
                temp = n % 100;
                if (n % 100 > 0) {
                    if (temp >= 20) {
                        if (temp % 10 > 0) {
                            words[wordIndex++] = withinTwentyNum[temp % 10];
                        }
                        words[wordIndex++] = theWholeTen[temp / 10];
                    } else {
                        words[wordIndex++] = withinTwentyNum[temp];
                    }
                }
                temp = n / 100;
                if (temp > 0) {
                    words[wordIndex++] = "Hundred";
                    words[wordIndex++] = withinTwentyNum[temp];
                }
            }
            for (int index = wordIndex - 1; index >= 0; index--) {
                sb.append(words[index]).append(" ");
            }
            return sb.toString().trim();
        }
    }
    public static void main(String[] args) {
        Solution sol = new Solution();
        System.out.println(sol.numberToWords(123));
        System.out.println(sol.numberToWords(12345));
        System.out.println(sol.numberToWords(1234567));
        System.out.println(sol.numberToWords(1234567891));
    }
}

输出:

One Hundred Twenty Three

Twelve Thousand Three Hundred Forty Five

One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven

One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力!

🌟 收藏,你的青睐是我努力的方向!

评论,你的意见是我进步的财富!  

主页:https://hannyang.blog.csdn.net/


目录
相关文章
|
1月前
|
Java
CSDN每日一练(Java)--小艺的英文名
CSDN每日一练(Java)--小艺的英文名
|
1月前
|
Java
Java中整数(负数)的二进制表示
Java中整数(负数)的二进制表示
|
1月前
【数据结构】数组、双链表代码实现
【数据结构】数组、双链表代码实现
|
2月前
|
存储 Python
一文掌握python数组字典dict()的全部用法(零基础学python(三))
一文掌握python数组字典dict()的全部用法(零基础学python(三))
61 0
|
1月前
|
算法 索引 Python
Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法
21 0
|
1月前
|
算法 Java
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
[Java·算法·简单] LeetCode 13. 罗马数字转整数 详细解读
23 0
|
1月前
|
Python
Python实现数据结构(如:链表、栈、队列等)。
Python实现数据结构(如:链表、栈、队列等)。
36 0
|
2月前
|
存储 索引 Python
一文掌握python数组numpy的全部用法(零基础学python(二))
一文掌握python数组numpy的全部用法(零基础学python(二))
29 0
|
4天前
|
Shell Python
python|闲谈2048小游戏和数组的旋转及翻转和转置
python|闲谈2048小游戏和数组的旋转及翻转和转置
21 1
|
14天前
|
存储 安全 数据处理
python如何将数据写到数组里
【4月更文挑战第12天】