首页 > 分享 > 华为机考笔记之字符串以水仙花规则拆分

华为机考笔记之字符串以水仙花规则拆分

题目:
一.输入一组字符串, 求字符串分组后,每组的和为水仙花数
(注:水仙花数是一个三位数 其个位、十位、百位的立次方 的和等于自身  如 371 = 3^3 + 7^3 + 1^1 )
(1)  如果无法找到该分组 ,返回0 ;
(2)  找到该分组,切分组不唯一 ,返回 -1;

(3)分组唯一 ,则返回分组的组数 ;

首次参加华为机考,遇到这个题,明人不说暗话,当时没完全做出来,哈哈,卡在了如何确定分组不唯一的问题上,哎,还是自己太菜了,还需要多学习哈。废话不多说,以下是我后来想到的一种实现方式:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

public class Main{

         public static boolean isShuixian(int num) {

        if(Integer.toString(num).length() != 3) {

            return false;
        }
        int a = num / 100;
        int b = num % 100 / 10;
        int c = num % 10;
        return Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) == num;
    }

         public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        List<int[]> list = new ArrayList<int[]>();
        while(in.hasNext()) {

            String str = in.nextLine();
            for(int l = 0; l < str.length(); l++) {

                for(int r = l; r < str.length(); r++) {

                    int num = 0;
                    for(int i = l; i <= r; i++) {

                        num += str.charAt(i);
                    }
                    int len = Integer.toString(num).length();
                    if(len < 3) {

                        continue;
                    }
                    if(len > 3) {

                        break;
                    }
                    if(isShuixian(num)) {

                        list.add(new int[] {l, r});
                    }
                }
            }
            int cnt = list.size();
            if(cnt <= 1) {

                System.out.println(cnt);
            }
            else {

                for(int i = 0; i < cnt - 1; i++) {

                    for(int j = i + 1; j < cnt; j++) {

                        int[] pointi = list.get(i);
                        int[] pointj = list.get(j);
                        if((pointi[0] >= pointj[0] && pointi[0] <= pointj[1])
                                || (pointi[1] >= pointj[0] && pointi[1] <= pointj[1])) {

                            System.out.println(-1);
                            return;
                        }
                    }
                }
                System.out.println(cnt);
            }
        }

             }
}

肯定还有更好的方式,我这只是抛砖引玉哈,希望各位同仁各位大神多多指点,多谢多谢哈~~~

相关知识

华为机考笔记之字符串以水仙花规则拆分
如何在JavaScript中按字符和新集合拆分列表?
作业打卡 设置密码 &水仙花数& 查找字符串
字符串
字符串查询算法
字符串基础(C# 编程指南)
2021年1月学考选考技术知识点之字符串问题
机器学习笔记(通俗易懂)
Awk练习笔记
字符串 (C++/CX)

网址: 华为机考笔记之字符串以水仙花规则拆分 https://m.huajiangbk.com/newsview105135.html

所属分类:花卉
上一篇: 实践计划进度etc.临时
下一篇: 西南知声 | 孙山《数字作品NF