字符串字符类型排序问题 先将字符串转换为字符数组,toCharArray()转换成数组的方法。 然后创建两个集合来存储字母和数字,在创建两个集合用来存储字母和数字在原字符串中的位置, for (int i = 0; i < chars.length; i++) { if (Character.isLetter(chars[i])) { letters.add(chars[i]); letterPositions.add(i); } else if (Character.isDigit(chars[i])) { digits.add(chars[i]); digitPositions.add(i); } } Character.isLetter(chars[i])是java中的一个方法,用于检查字符 chars[i] 是否为字母字符。这个方法属于 Character 类,返回一个布尔值 true 或 false。如果 chars[i] 是字母字符(包括大写和小写字母),则返回 true;否则返回 false
如果char[i]是字母,就运行If中的代码,将字符加到letter集合当中,如果不是,就加到数字集合当中,因为集合是添加一个value就向后增加一格,所以添加进来的顺序是不会变的 然后就遍历完了所有的字符,将他们已经存放到了该存在的集合当中。 Collections.sort(letters);这个方法是将字母重新按照大小进行排序,Collections.sort(digits, Collections.reverseOrder()); 同样,这个是将数字按照大小排序。 保留符号位置:符号的位置保持不变,因为它们没有被添加到 letters 或 digits 列表中。
chars[letterPositions.get(i)] = letters.get(i); 获取字母的位置:letterPositions.get(i) 返回字母在原始字符串中的位置。 获取排序后的字母:letters.get(i) 返回排序后的字母。放回原位置:chars[letterPositions.get(i)] = letters.get(i) 将排序后的字母放回字符数组 chars 中对应的原始位置。
数字分组求偶数和 题目:一组从 1 到 9 的数字,这些数字被分成多个小组,并从每个小组中选择一个数字组成一个新的数。目标是使得这个新数的各位数字之和为偶数。任务是计算出有多少种不同的分组和选择方法可以达到这一目标
题目解答:(计数器思想)先初始化计数器为零,记录有多少个能达成目标的组合, count = countCombinations(numbers, 0, 0);调用countCombinations方法,numbers是数组,表示要处理的数字,第一个0表示当前处理的数字组的索引,第二个零表示当前选择的数字的和的初始值,这个方法是用来计算符合条件的数量
比赛配对问题:1. 偶数队伍:如果当前队伍数为偶数,每支队伍都会与另一支队伍配对,进行 n / 2 场比赛,剩下 n / 2 支队伍。
- 奇数队伍:如果当前队伍数为奇数,随机轮空并晋级一支队伍,其余的队伍配对,进行
(n - 1) / 2场比赛,剩下(n - 1) / 2 + 1支队伍。
-
**
初始条件**:如果n为 1,直接返回 0,因为不需要进行任何比赛。 -
递归或迭代:
- 如果
n为偶数,进行n / 2场比赛,剩下n / 2支队伍。 - 如果
n为奇数,进行(n - 1) / 2场比赛,剩下(n - 1) / 2 + 1支队伍。
- 如果
-
累加比赛次数:每次配对后,累加当前的比赛次数,直到队伍数变为 1。