十道简单算法题(一)

简介: 最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下,重温一下。

前言


最近在回顾以前使用C写过的数据结构和算法的东西,发现自己的算法和数据结构是真的薄弱,现在用Java改写一下,重温一下。

只能说慢慢积累吧~下面的题目难度都是简单的,算法的大佬可直接忽略这篇文章了~入门或者算法薄弱的同学可参考一下~

很多与排序相关的小算法(合并数组、获取数字每位值的和),我都没有写下来了,因为只要会了归并排序(合并数组),会了桶排序(获取数字每位的值),这些都不成问题了。如果还不太熟悉八大基础排序的同学可看:【八大基础排序总结

由于篇幅问题,每篇写十道吧~

如果有错的地方,或者有更好的实现,更恰当的理解方式希望大家不吝在评论区留言哦~大家多多交流

十道简单算法题


题目的总览


  1. 1-n阶乘之和
  2. 获取二维数组每列最小的值
  3. 求"1!+4!(2的平方)+9!(3的平方)+…+n的值
  4. 数组对角线元素之和
  5. 打印杨辉三角形
  6. 猴子吃桃子问题
  7. 计算单词的个数
  8. 判断字母是否完全一样
  9. 判断一个数是不是2的某次方
  10. 判断一个数字是不是ugly number


一、1-n阶乘之和


1-n阶乘之和怎么算?

  • 1的阶乘是1
  • 2的阶乘是1*2
  • 3的阶乘是1*2*3
  • 4的阶乘是1*2*3*4
  • ………

现在我们要求这些阶乘的和。思路:

  • 3阶乘的和其实上就是2阶乘的和+3的阶乘
  • 4阶乘的和其实上就是3阶乘的和+4的阶乘
  • …….


/**
     * 1-n的阶乘之和
     */
    public static void Factorial(int n) {
        //总和
        double sum = 0;
        //阶乘值,初始化为1
        double factorial = 1;
        for (int i = 1; i <= n; i++) {
            factorial = factorial * i;
            sum = (int) (sum + factorial);
        }
        System.out.println("公众号:Java3y" + "     " + sum);
    }


二、获取二维数组每列最小的值


获取二维数组每列最小的值

思路:遍历列,再遍历列中行

我们一般操作数组都是从行开始,再到列的。这次要求的是每列的最小值,因此需要在内部for循环遍历的是行


/**
     * 求出二维数组每列的最小值
     */
    public static void minArray() {
        //二维数组
        int[][] arrays = {
            {23, 106, 8, 234},
            {25, 9, 73, 19},
            {56, 25, 67, 137}
        };
        //获取列数
        int maxColLength = arrays[0].length;
        //使用一个数组来装载每列最小的值
        int[] minArray = new int[maxColLength];
        //控制列数
        for (int i = 0; i < maxColLength; i++) {
            //假设每列的第一个元素是最小的
            int min = arrays[0][i];
            //控制行数
            for (int j = 1; j < arrays.length; j++) {
                //找到最小值
                if (arrays[j][i] < min) {
                    min = arrays[j][i];
                }
            }
            //赋值给装载每列最小的值的数组
            minArray[i] = min;
        }
        System.out.println("公众号:Java3y" + "     " + minArray);
    }


三、求"1!+4!(2的平方)+9!(3的平方)+…+n的值

求"1!+4!(2的平方)+9!(3的平方)的值

思路:先求平方,后求阶乘,最后相加即可~


/**
     * 求"1!+4!(2的平方)+9!(3的平方)+...+n的值
     */
    public static void calculate() {
        double sum = 0;
        for (int i = 1; i <= 3; i++) {
            //得到平方数
            int square = i * i;
            //阶乘值,从1开始
            double factorial = 1;
            //求阶乘
            for (int j = 1; j <= square; j++) {
                factorial = factorial * j;
            }
            sum = sum + factorial;
        }
        System.out.println("公众号:Java3y" + "     " + sum);
    }


四、数组对角线元素之和

数组对角线元素之和

思路:

  • 只要行和列相等,即是对角线的元素


/**
     * 数组对角线之和
     */
    public static void arraySum() {
        int[][] arrays = {
                {23, 106, 8, 234},
                {25, 9, 73, 19},
                {56, 25, 67, 137},
                {33, 22, 11, 44},
        };
        //和
        int sum = 0;
        for (int i = 0; i < arrays.length; i++) {
            for (int j = 0; j < arrays[i].length; j++) {
                if (i == j) {
                    sum = sum + arrays[i][j];
                }
            }
        }
        System.out.println("公众号:Java3y" + sum);
    }


五、打印杨辉三角形

杨辉三角形

杨辉三角形长的是这个样子:

83.jpg

ps:图片来源网上,侵删~

规律:

  • 每行的第一个和最后一个都是1
  • 进一步推算:第1列全部为1,第一行全都是1,当列数等于行数为1
  • 当前值等于头上的值加头上的左边的值
  • 第一行一列,第二行两列,第三行三列…….

84.jpg


代码实现:


/**
     * 打印杨辉三角形
     */
    public static void PascalTriangle() {
        //打印十行的杨辉三角形
        int[][] arrays = new int[10][];
        //行数
        for (int i = 0; i < arrays.length; i++) {
            //初始化第二层的大小
            arrays[i] = new int[i + 1];
            //列数
            for (int j = 0; j <= i; j++) {
                //是第一列,第一行,行数等于列数,那么通通为1
                if (i == 0 || j == 0 || j == i) {
                    arrays[i][j] = 1;
                } else {
                    //当前值等于头上的值+头上左边的值
                    arrays[i][j] = arrays[i - 1][j] + arrays[i - 1][j - 1];
                }
            }
        }
        System.out.println("公众号:Java3y" + "-------------------------------");
        for (int[] array : arrays) {
            for (int value : array) {
                System.out.print(value + "\t");
            }
            System.out.println();
        }
        System.out.println("公众号:Java3y" + "-------------------------------");
    }

目录
相关文章
|
6月前
|
算法 前端开发
每天一算法,脑子不生锈(真押韵)
每天一算法,脑子不生锈(真押韵)
|
6月前
【编程题-错题集】非对称之美(找规律 / 贪心)
【编程题-错题集】非对称之美(找规律 / 贪心)
四道好题分享(看似简单,但是棘手)
四道好题分享(看似简单,但是棘手)
102 0
|
算法 Java 测试技术
大厂面试题:求根号2简单?高级算法你肯定不会
大厂面试题:求根号2简单?高级算法你肯定不会
238 0
大厂面试题:求根号2简单?高级算法你肯定不会
|
算法 Python
简单算法
python 简单算法
66 0
|
存储 机器人 Java
肝了好多天-动态规划十连-超细腻解析
【刷题打卡】周末肝了几道动态规划题,写一下我的心得笔记,故事开头,文章循序渐进,如果看官出现头疼不适,望休息,但是别放弃一定要看完!号外:每道题都有单元测试,看官们直接copy就可以debug了。
131 0
再学一道算法题: 食物链(带权并查集)
再学一道算法题: 食物链(带权并查集)
再学一道算法题: 食物链(带权并查集)
|
算法
重温算法之加油站
有时候自己一直找不到突破口是因为自己把问题想困难了,其实有的问题很简单,需要不断的分解。无论怎么样,这也是自己思考后的产物
121 0
重温算法之加油站
【面试高频题】难度 1.5/5,脑筋急转弯类模拟题
【面试高频题】难度 1.5/5,脑筋急转弯类模拟题
|
算法 数据安全/隐私保护