分享好友 编程语言首页 频道列表

[算法Rust,Go,Python,JS实现)]LeetCode之38-报数

rust文章/教程  2023-02-09 00:480

题目:

报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:

1.     1
2.     11
3.     21
4.     1211
5.     111221
1 被读作  "one 1"  ("一个一") ,1111 被读作 "two 1s" ("两个一",2121 被读作 "one 2",  "one 1""一个二" ,  "一个一") ,1211。

给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。

思路

下一项是上一项的解释,如
[0]:1
[1]:11 表述字符串:"11"
[2]:21 表述字符串:"21"
[3]:1211 表述字符串:"1211"
....依次类推
这提比较有意思

Rust实现

use std::char::from_digit;
impl Solution {
    pub fn count_and_say(n: i32) -> String {
        if n == 1 {
            return "1".to_string();
        } else {
            let mut rvecs = vec![];
            let str = &*(Solution::count_and_say(n-1));
            let mut vecs = vec![];
            let mut count:u32 = 1;
            for char in str.chars() {
                vecs.push(char);
            }
            for i in 0..vecs.len() {
                if i+1 < vecs.len() && vecs[i] == vecs[i+1]{
                    count += 1;
                } else {
                    rvecs.push(from_digit(count, 10).unwrap());
                    rvecs.push(vecs[i]);
                    count = 1;
                }
            }
            return rvecs.iter().collect();
        }
    }
}

Go实现

func countAndSay(n int) string {
	if n == 1 {
		return "1"
	} else {
		str := countAndSay(n-1)
		count := 1
		res := ""
		for i:=0;i<len(str);i++ {
			if i+1<len(str)&&str[i]==str[i+1]{
				count ++
			} else {
			   res = res + strconv.Itoa(count)+string(str[i])
			   // 重置
			   count = 1
			}
		}
		return res
	}
}

Python实现

class Solution:
    def countAndSay(self, n: int) -> str:
        if n == 1:
            return "1"
        else:
            st = self.countAndSay(n-1)
            count = 1
            res = ""
            for i in range(0, len(st)):
                if i+1 < len(st) and st[i] == st[i+1]:
                    count += 1
                else:
                    res = res+ str(count)+str(st[i])
                    count = 1 
        return res

JavaScript实现

/**
 * @param {number} n
 * @return {string}
 */
var countAndSay = function(n) {
   if(n == 1) {
       return "1"
   } else {
       let str = countAndSay(n-1);
       let count = 1;
       let res = "";
       for (let i = 0;i < str.length;i++) {
           if (str[i] == str[i+1]) {
               count ++
           } else {
               res = res+count + str[i]
               count = 1
           }
       }
       return res
   }
};

效果
[算法Rust,Go,Python,JS实现)]LeetCode之38-报数

源码下载地址:

源码下载地址

查看更多关于【rust文章/教程】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
Rust到底值不值得学--Rust对比、特色和理念
前言其实我一直弄不明白一点,那就是计算机技术的发展,是让这个世界变得简单了,还是变得更复杂了。当然这只是一个玩笑,可别把这个问题当真。然而对于IT从业者来说,这可不是一个玩笑。几乎每一次的技术发展,都让这个生态变得更为复杂。“英年早秃”已经成

0评论2023-03-08818

全栈程序员的新玩具Rust(三)板条箱
上次用到了stdout,这次我们来写一个更复杂一点的游戏rust的标准库叫做std,默认就会引入。这次我们要用到一个随机数函数,而随机数比较尴尬的一点是这玩意不在标准库中,我们要额外依赖一个库。很多编程方案都有自己的模块化库系统,rust也不例外,不过rust

0评论2023-02-10729

【Rust】标准库-Result rust数据库
环境Rust 1.56.1VSCode 1.61.2概念参考:https://doc.rust-lang.org/stable/rust-by-example/std/result.html示例main.rsmod checked {#[derive(Debug)]pub enum MathError {DivisionByZero,NonPositiveLogarithm,NegativeSquareRoot,}pub type MathResult =

0评论2023-02-09978

【Rust】标准库-引用 rust 数据库框架
环境Rust 1.56.1VSCode 1.61.2概念参考:https://doc.rust-lang.org/stable/rust-by-example/std/rc.html示例rust 使用 Rc 来实现引用计数。main.rsuse std::rc::Rc;fn main() {let rc_examples = "Rc examples".to_string();{println!("--- rc_a is created

0评论2023-02-09638

rust 打印当前时间
let now = time::now();let f_now = time::strftime("%Y-%m-%dT%H:%M:%S", now).unwrap();println!("now: {:?}", f_now);

0评论2023-02-09689

【Rust】线程 rust编程语言
环境Rust 1.56.1VSCode 1.61.2概念参考:https://doc.rust-lang.org/stable/rust-by-example/std_misc/threads.html示例main.rsuse std::thread;const N_THREADS: u32 = 10;fn main() {let mut children = vec![];for i in 0..N_THREADS {children.push(threa

0评论2023-02-09956

更多推荐